1. 修改hosts和hostname
在ubuntu上,/etc/hosts 保存IP地址和域名的对应关系,/etc/hostname 保存本机的主机名。我们可以在hosts文件里加入这样的映射
ip_address1 master
ip_address2 slave1
ip_address3 slave2
然后用
sudo hostname name1
sudo hostname name2
sudo hostname name3
修改这三台服务器的主机名。可以用
hostname
查看是否修改成功。
2. ssh 设置
我们需要设置ssh,让集群做到无密登录。首先,要产生一对RSA钥匙对:
ssh-keygen -t rsa -f ~/.ssh/id_rsa
尽管我们要做到无密登录,但是产生钥匙对时最好输入一个密码。~/.ssh/id_rsa 是私钥,~/.ssh/id_rsa.pub 是公钥。我们在每台机器上都产生钥匙对,然后用 scp
命令把公钥传送到其他机子上。
cat id_rsa.pub >> ~/.ssh/authorized_keys
这样就把公钥加入了认证钥匙中。接着用 ssh-agent
、ssh-add
做到无密登录,
ssh-agent bash
ssh-add
无密登录就完成了。
3. 安装Java方法
从Java官网下载最新额JDK。
在/home/ubuntu/
目录下对jdk-10.0.2.tar.gz
文件输入命令 tar -xzvf [filename].tar.gz
解压好的文件夹jdk-10.0.2/
就是JDK的安装目录。
然后在~/.bashrc
后面加入几行命令
export JAVA_HOME="/home/ubuntu/jdk-10.0.2"
export PATH="$JAVA_HOME/bin:$PATH"
export CLASSPATH="$JAVA_HOME/lib/"
这样就把java的路径加入了环境变量中。输入java -version
,看到类似下列的显示就可以确认Java已经正确安装。
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
4. Hadoop的下载和安装
-
从这两个地址下载Hadoop安装文件和验证文件:下载地址一、下载地址二。这里的版本是2.9.2。下载命令如下:
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz wget https://www-eu.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz.asc wget https://www-eu.apache.org/dist/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz.mds wget https://www-us.apache.org/dist/hadoop/common/KEYS
详细说明请看这里。
2. 验证下载文件:
我们可以用PGP或者GPG来验证PGP的签名。首先下载针对相关版本的KEYS和asc文件。你应该从主要分发网站下载,而不是镜像网站下载。我们用下列指令来验证签名:
gpg --import KEYS
gpg --verify downloaded_file.asc downloaded_file
验证成功后可以得到这样的输出:
gpg: Signature made Wed 14 Nov 2018 01:48:06 AM CST using RSA key ID A400FD50
gpg: Good signature from "Akira Ajisaka <[email protected]>"
gpg: aka "Akira Ajisaka <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: F05D F650 0A02 1922 7B56 6990 C1ED BB9C A400 FD50
或者
pgpk -a KEYS
pgpv downloaded\_file.asc
或者
pgp -ka KEYS
pgp downloaded\_file.asc
或者,你也可以验证文件的哈希值。我们可以用gpg命令计算哈希值。
gpg --print-md SHA1 downloaded_file
该命令的输出应该与SHA1文件的内容进行对比。mds文件的内容类似于下面
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
MD5 = 82 DB 6A 62 FE BD 8C 29 76 D7 5B 8B D5 51 33 15
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
SHA1 = EBB3 F0E5 536E E79E C00F 8D8A 209E F647 B10B DE26
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
RMD160 = 903E 2EDF 5877 B09F 04B7 8E3C 7789 66CD AE88 362E
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
SHA224 = 1E76D1BD ED80F3B0 CE8C5ED6 3897A39E A75E219D BEB09023 D55892C7
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
SHA256 = 3D2023C4 6B1156C1 B102461A D08CBC17 C8CC5300 4EAE95DA B40A1F65 9839F28A
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
SHA384 = BA008D60 DF04A896 FDEEE5B7 B9C2233C C33692D4 F423EA7B 1F088913 4C36A057
FE859ED3 0FA41F1A 194B239F 09A3FF28
/build/source/target/artifacts/hadoop-2.9.2.tar.gz:
SHA512 = BD6060B6 29C2E7C5 D411AE3B A2330B79 CDB2F1CA A87D5EA6 9392C0F9 CB64A834
64EC8E23 F2CC6133 1B9F4928 4A6BFDC1 A3FBDEFF E3402650 E64938F5 672094F5
-
安装Hadoop:我们可以把Hadoop安装在/usr/local/下。注意:不要把它装在用户目录下。
sudo mv hadoop-2.9.2.tar.gz /usr/local/ cd /usr/local sudo tar xzvf hadoop-2.9.2.tar.gz
我们也需要把Hadoop的文件主任设置为Hadoop的用户和组群
sudo chown -R root:root hadoop-2.9.2
这里Hadoop的用户和组群都是root。
-
SSH设置:Hadoop控制脚本依赖SSH来实施集群内部的操作。为了做到无缝工作,我们需要设置SSH来允许集群内部主机用户进行无密码登录。最简单的方法时产生一对公钥和秘钥,然后用网络文件系统在集群内共享。
- 首先在Hadoop用户账号下用指令
ssh-keygen -t rsa -f ~/.ssh/id_rsa
产生RSA钥匙对。尽管我们需要无秘钥登录,但是没有密码的钥匙并不是个好操作。我们应该用ssh-agent来避免每次连接都要输入密码。-f 选项指定了私钥的存储文件,公钥则存储在相同文件夹相同文件名并以.pub结尾的文件中,~/.ssh/id_rsa.pub。id_rsa可以是任何文件名。 - 我们需要确保公钥保存在集群内部任何机器的
~/.ssh/authorized\_keys
文件中。如果Hadoop用户目录是个网络文件系统,那么钥匙可以用cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
指令来共享。如果用户目录没有使用网络文件系统,那么我们就要手动复制文件来共享。把文件从master传送到每个slave上,以及把文件从每个slave传送到master上:scp /home/username1/.ssh/id_rsa.pub >> username2@ip_address:/home/username2/id_rsa.pub
。把id_rsa.pub
里的内容复制到authorized_keys
里:cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
。 - 我们用
ssh-agent bash
启动一个带着ssh-agent
的bash
,在这个bash
里面用ssh-add
添加钥匙。然后在这个bash
里的任何程序都会自动使用ssh-agent
记录的钥匙登录其他机器。
- 首先在Hadoop用户账号下用指令
-
配置Hadoop:
cd /usr/local/hadoop-2.9.2/etc/hadoop
进入Hadoop配置目录,需要配置有以下7个文件:hadoop-env.sh
、yarn-env.sh
、slaves
、core-site.xml
、hdfs-site.xml
、mapred-site.xml
、yarn-site.xml
。-
在
hadoop-env.sh
中配置JAVA_HOME
。如果环境变量中已经定义过JAVA_HOME
,那么这里也不可以省略。 -
在
yarn-env.sh
中配置JAVA_HOME
,同上。 -
在slaves中配置slave结点的ip或者host。
-
修改
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000/</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/spark/workspace/hadoop-2.6.0/tmp</value> </property> </configuration>
-
修改
hdfs-site.xml
文件<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/spark/workspace/hadoop-2.6.0/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/spark/workspace/hadoop-2.6.0/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>
-
修改
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
-
修改
yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8035</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration>
-
-
将配置好的hadoop-2.9.2文件夹分发给所有的slaves,可以用使用scp指令,例如下面
scp -r /usr/local/hadoop-2.9.2 ubuntu@slave1:~/
-
启动Hadoop:在master上执行以下操作,就可以启动hadoop了。
cd /usr/local/hadoop-2.9.2 bin/hadoop namenode -format sbin/start-dfs.sh sbin/start-yarn.sh
-
验证hadoop是否安装成功: 可以通过jps命令查看各个结点启动的进程是否正常。在master上应该有以下几个进程
$ jps #run on master 3407 SecondaryNameNode 3218 NameNode 3552 ResourceManager 3910 Jps
如果master上的进程启动失败,首先应该检查master上的端口是否被屏蔽了或者已经被占用了。
-
在每个slave上应该有以下几个进程:
$ jps #run on slaves 2072 NodeManager 2213 Jps 1962 DataNode
或者在浏览器输入
http://master_ip:8088
,这里把master_ip替换为master的IP地址,应该有hadoop的管理界面出来,并能看到slave1和slave2结点,如下图所示