1.申请2-3台腾讯云服务器
安全组编辑规则,允许ALL。这样hadoop集群服务器才能访问。
2.安装JDK服务器
jdk配置
**master,slave机器都要装jdk**-(1)上传JDK安装包到虚拟机/opt目录
-(2)进入/opt目录,执行命令“rpm -ivh jdk-8u151-linux-x64.rpm”安装JDK(注意,自己手动输入-ivh命令)
-(3)在vi /etc/profile添加
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
执行source /etc/profile 使配置生效
-(4)验证JDK是否配置成功,执行命令“java -version”
3.设置SSH无密码登录
ssh免密登录,很重要,否则不同机器无法访问
(1)云环境下主机ip设置,配置ip和master映射- master节点,
vi /etc/hosts
,修改后,执行source /etc/hosts
,具体参考这个网址。
master内网云ip master
slave1公网ip slave1
修改主机名hostnamectl set-hostname master
,slave机器同操作。reboot机器可以看到主机名更改
- slave节点,
vi /etc/hosts
,修改后,执行source /etc/hosts
master内网云ip master
slave1公网ip slave1
(2)生成私有密钥id_rsa和公有密钥id_rsa.pub两个文件ssh-keygen -t rsa
#接着按三次Enter键,ssh-keygen用来生成RSA类型的密钥以及管理该密钥,参数“-t”用于指定要创建的SSH密钥的类型为RSA
(3)远程负责到各个机器
ssh-copy-id -i /root/.ssh/id_rsa.pub master//依次输入yes,123456(root用户的密码)
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2
(4)验证是否设置无密码登录,依次输入
ssh slave1
ssh slave2
ssh slave3
注意,ssh配置存在问题,slave机器出现authorized_keys拒绝访问问题。由于你重新生成公钥,再次写入authorized_keys,会被拒绝,可以在slave机器上,用chmod修改文件权限,也会拒绝可以用如下命令解决
进入slave机器的cd /root/.ssh/ 目录,执行下面权限修改
chattr -i authorized_keys #对文件解锁
chmod 600 authorized_keys #修改文件为可读写权限
进入master机器,执行ssh-copy-id -i /root/.ssh/id_rsa.pub slave1 #slave生成新的公钥
4.配置Hadoop集群
配置Hadoop集群
1.通过xmanager的Xftp上传hadoop-2.6.5.tar.gz文件到/opt目录2.解压缩hadoop-2.6.5.tar.gz 文件,tar -zxf hadoop-2.6.5.tar.gz -C /usr/local
,解压后即可,看到/usr/local/hadoop-2.6.5文件夹
3.配置Hadoop,进入目录:cd /usr/local/hadoop-2.6.5/etc/hadoop/
4.依次修改下面的文件:
(1) vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/log/hadoop/tmp</value>
</property>
</configuration>
(2)vi hadoop-env.sh ,export JAVA_HOME=/usr/java/jdk1.8.0_151
(3) vi hdfs-site.xml
注意:/data/hadoop/hdfs/name/里面存放名称节点信息。/data/hadoop/hdfs/data/存放datanode节点信息
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
注意:replication的value表示有几台slave,1台就写1
(4) mapred-site.xml,没有这个文件,执行复制 cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- jobhistory properties -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
(5)vi yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/data/tmp/logs</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs/</value>
<description>URL for job history server</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<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.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>
(6)vi yarn-env.sh, export JAVA_HOME=/usr/java/jdk1.8.0_151
5.vi slaves,删除localhost,添加:
slave1
slave2
slave3
6.拷贝hadoop安装文件到集群slave节点
scp -r /usr/local/hadoop-2.6.5 slave1:/usr/local
scp -r /usr/local/hadoop-2.6.5 slave2:/usr/local
scp -r /usr/local/hadoop-2.6.5 slave3:/usr/local
7.在/etc/profile添加Hadoop路径
export HADOOP_HOME=/usr/local/hadoop-2.6.5
export PATH=$HADOOP_HOME/bin:$PATH
执行source /etc/profile
使修改生效
8.格式化NameNode,进入目录,`cd /usr/local/hadoop-2.6.5/bin',执行格式化,'./hdfs namenode -format'
格式化不在改目录,可以用hdfs命令:hdfs namenode -format
9.启动集群,进入目录,cd /usr/local/hadoop-2.6.5/sbin
执行启动:
./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver
或者./start-all.sh
关闭集群的命令。./stop-all.sh
10.使用jps,查看进程
master节点信息如下
[root@master sbin]# jps
1765 NameNode
1929 SecondaryNameNode
2378 JobHistoryServer
2412 Jps
2077 ResourceManager
slave节点jps信息如下:
[root@slave1 ~]# jps
1844 Jps
1612 DataNode
1711 NodeManager
11.在Windows下C:WindowsSystem32driversetchosts添加IP映射
公网腾讯云ip master master.centos.com
公网腾讯云ip slave1 slave1.centos.com
公网腾讯云ip slave2 slave2.centos.com
公网腾讯云ip slave3 slave3.centos.com
- 浏览器查看:
http://master:50070
http://master:8088
5.常见问题
5.1 datanode、namenode 无法启动
- 这个主要由于namenode多次格式化引起集群id不匹配,参考这个网页设置集群id
cd /usr/local/hadoop-2.6.5/logs
ls #查找datanode的log文件查看
cat hadoop-root-datanode-VM-0-14-centos.log #查找cid值,复制后面内容
master节点进入vi /data/hadoop/hdfs/name/current/VERSION 更改clusterID为新的内容。
slave节点进入vi /data/hadoop/hdfs/data/current/VERSION 更改clusterID为新的内容。
- 或者删除namenode,datanode下current文件夹.
1.master节点操作
cd /data/hadoop/hdfs/name/
rm -rf current
2.slave节点操作
cd /data/hadoop/hdfs/data/
rm -rf current
集群关闭再dfs命令格式化那么node节点:`hdfs namenode -format `,重启集群则可以看到。
5.2 mapreduce job卡住问题
- 测试mapreduce 样例
hadoop jar /usr/local/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /test/bb.txt /test/wd1
- kill MapReduce程序命令
yarn application -kill application_id
- 打开mapreduce日志文件:进入$HADOOP_HOME/sbin/ ,执行命令
./mr-jobhistory-daemon.sh start historyserver
,再进入http://master:50070/logs/,就可以看到MapReduce日志。