1. 网络配置
#hostname
1.2 修改当前机器名称
1.3 修改当前机器IP
1.4 配置hosts文件(必须)
192.168.3.111 hadoopserver01
192.168.3.112 hadoopserver02
192.168.3.113 hadoopserver03
1.5 VSFTP上传
2. SSH无密码验证配置
2.1 SSH无密码原理
Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
2.2 Master机器上生成密码对
#ssh-keygen –t rsa –P ''
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效
修改文件"authorized_keys"
#chmod 600 ~/.ssh/authorized_keys
设置SSH配置, 用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容
#vim /etc/ssh/sshd_conf
>RSAAuthentication yes # 启用 RSA 认证
>PubkeyAuthentication yes # 启用公钥私钥配对认证方式
>AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
设置完之后记得重启SSH服务,才能使刚才设置有效。
#service sshd restart
使用hadoop普通用户验证是否成功。
#ssh localhost
把公钥复制所有的Slave机器上
#scp ~/.ssh/id_rsa.pub [email protected]:~/
在slave"/home/hadoop/"下创建".ssh"文件夹
#mkdir ~/.ssh
修改文件夹".ssh"的用户权限,把他的权限修改为"700" (注意这里是700)
#chmod 700 ~/.ssh
追加到授权文件"authorized_keys"
#cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
#chmod 600 ~/.ssh/authorized_keys
用root用户修改"/etc/ssh/sshd_config"
#vim /etc/ssh/sshd_conf
>RSAAuthentication yes # 启用 RSA 认证
>PubkeyAuthentication yes # 启用公钥私钥配对认证方式
>AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
最后记得把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉
2.3 配置所有Slave无密码登录Master
和Master无密码登录所有Slave原理一样,就是把Slave的公钥追加到Master的".ssh"文件夹下的"authorized_keys"中,记得是追加(>>)
3 Java环境安装
所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以"root"的身份进行
3.1 下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3.2 首先用root身份登录"Master.Hadoop"后在"/usr"下创建"java"文件夹,
#mkdir /usr/java
#cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/
3.3 配置环境变量, 编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容
#vim /etc/profile
># set java environment
>export JAVA_HOME=/usr/java/jdk1.8.0_131/
>export JRE_HOME=/usr/java/jdk1.8.0_131/jre
>export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
>export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
或者
># set java environment
>export JAVA_HOME=/usr/java/jdk1.8.0_131
>export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
>export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
保存并退出,执行下面命令使其配置立即生效。
#source /etc/profile
3.4 验证安装成功
#java -version
4 Zookeeper安装(3.3.6)
Apache ZooKeeper是一个为分布式应用所设计的开源协调服务,其设计目的是为了减轻分布式应用程序所承担的协调任务。它可以为用户提供同步、配置管理、分组和命名等服务
4.1 下载并解压ZooKeeper-3.4.6.tar.gz
#cd /opt
#tar -zxvf zookeeper-3.4.6.tar.gz
#cp zoo_sample.cfg zoo.cfg
>dataDir=/data/zookeeper/zkdata
>dataLogDir=/data/zookeeper/zkdatalog
>server.1=master:2888:3888
>server.2=slave1:2888:3888
>server.3=slave2:2888:3888
#mkdir -p /data/zookeeper/zkdata
#mkdir -p /data/zookeeper/zkdatalog
#cd /data/zookeeper/zkdata
#touch myid
#echo "1" > myid
设置日志
#vim conf/log4j.properties
># Define some default values that can be overridden by system properties
>zookeeper.root.logger=INFO, ROLLINGFILE
># Add ROLLINGFILE to rootLogger to get log file output
># Log DEBUG level and above messages to a log file
>log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender (暂不做该项修改)
#vim bin/zkEvn.sh
>if [ "x${ZOO_LOG_DIR}" = "x" ]
>then
> ZOO_LOG_DIR="$ZOOBINDIR/../logs"
>fi
>if [ "x${ZOO_LOG4J_PROP}" = "x" ]
>then
> ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
>fi
4.2 从master节点分发文件到其他节点
#scp -r zookeeper-3.4.6 slave1:~/
#scp -r zookeeper-3.4.6 slave2:~/
#scp -r data slave1:~/
#scp -r data slave2:~/
在slave1节点的/opt/目录, vi ./data/zookeeper/zkdata/myid 修改为 2
在slave2节点的/opt/目录, vi ./data/zookeeper/zkdata/myid 修改为 3
4.3 在每个节点配置环境变量/etc/profile
#Set ZOOKEEPER_HOME ENVIRONMENT
>export ZOOKEEPER_HOME=/opt/zookeeper
>export PATH=$PATH:$ZOOKEEPER_HOME/bin
4.4 启动
关闭防火墙
#sudo ufw disable
在每个节点上$ZOOKEEPER_HOME目录下,运行 (这里的启动顺序为 master > slave1 > slave2 )
#bin/zkServer.sh start
并通过jps可以看到:启动了QuorumpeerMain进程
#jps
并用命令查看启动状态
这里需要注意点,只有当至少启动了三个节点之后,该命令才会产生结果。否则会显示:zookeeper Error contacting service. It is probably not running错误
#bin/zkServer.sh status
5 Hadoop集群安装
5.1 安装hadoop
首先用root用户登录"Master.Hadoop"机器,查看我们之前用FTP上传至"/home/Hadoop"上传的"hadoop-1.0.0.tar.gz"
#cp /home/hadoop/hadoop-1.0.0.tar.gz /usr
#cd /usr
#tar –zxvf hadoop-1.0.0.tar.gz
#mv hadoop-1.0.0 hadoop
#chown –R hadoop:hadoop hadoop
#rm –rf hadoop-1.0.0.tar.gz
最后在"/usr/hadoop"下面创建tmp文件夹,把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效
#mkdir /usr/hadoop/tmp
#vim /etc/profile
># set hadoop path
>export HADOOP_HOME=/usr/hadoop
>export PATH=$PATH:$HADOOP_HOME/bin
重启"/etc/profile"
#source /etc/profile
5.2 配置hadoop (2.8)
5.2.1 配置hadoop-env.sh
该"hadoop-env.sh"文件位于"/usr/hadoop/conf"目录下, 在文件的末尾添加下面内容
># set java environment
>export JAVA_HOME=/usr/java/jdk1.6.0_31
#vim etc/hadoop/core-site.xml
在<configuration></configuration>中加入
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoopserver01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
#vim etc/hadoop/hdfs-site.xml
在<configuration></configuration>中加入
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoopserver01:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
#vim etc/hadoop/mapred-site.xml
在<configuration></configuration>中加入
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoopserver01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoopserver01:19888</value>
</property>
#vim etc/hadoop/yarn-site.xml
在<configuration></configuration>中加入
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoopserver01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoopserver01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoopserver01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoopserver01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoopserver01:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>6078</value>
</property>
#vim etc/hadoop/yarn-env.sh
中找到 export JAVA_HOME 去掉注释
编辑java地址 export JAVA_HOME=/usr/java/jdk1.8.0_121
找到JAVA_HEAP_MAX=-Xmx1000m
改为 JAVA_HEAP_MAX=-Xmx1024m
#vim etc/hadoop/slaves
清空添加 hadoopserver01