首页 > 代码库 > Hadoop 2.2.0 第一步
Hadoop 2.2.0 第一步
Hadoop 2.2.0分布式环境搭建。根据网上和视频上的内容总结。
环境为3台虚拟机,centOS6.5 32位。
_______________________________
hostname | ip |
hadoop1 | 192.168.4.109 |
hadoop2 | 192.168.4.110 |
hadoop3 | 192.168.4.111 |
_______________________________
1、设置静态ip
修改ip设置完之后重启网卡,执行命令 service network restart
验证:执行命令 ifconfig
2、修改主机名
hostname 回车查看当前的主机名
gedit /etc/sysconfig/network修改hostname
3、绑定ip和主机名
gedit /etc/hosts增加一行
192.168.4.109 hadoop1
192.168.4.110 hadoop2
192.168.4.111 hadoop3
保存退出 三台电脑都这么配
验证 ping hadoop1,ping hadoop2 , ping hadoop3
4、关闭防火墙(教程上是关闭的,实际上肯定不能管 不管它了以后再说)
service iptables stop
chkconfig iptables off
5、ssh(secure shell)加密 ssh的免密码登陆
执行命令产生密钥 ssh-keygen -t rsa 命令行的提示一路回车到完成,产生的密钥位于~/.ssh文件夹中
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chkconfig sshd on
重启 SSH 服 务命令使其生效 :service sshd restart
比较文绉绉的总结是这样:“被登录的机子要有登录机子的公钥,登录的机子要有私钥,这个公钥/私钥对一般在私钥宿主机产生。”这句话太TM不爽弄得老子晕头转向,废话少说就一句话 A B C三台电脑 都产生了id_rsa.pub,authorized_keys这两个吊东西第二个是cp代码复制出来的,把A的authorized_keys里面的内容追加到B和C相同位置相同文件的内容后面 注意力不是替换文件。就搞定了。去他凉的死读书绕来绕去。
验证 ssh hadoop2,此时可无密码登录hadoop2,不要急着去ssh hadoop3因为你在hadoop2里,先exit再ssh hadoop3
6、安装jdk
安装JDk就他娘的配置环境变量就好了,把它丢在/usr/local/jdk这个目录,
这里环境变量怎么配的看下边我贴一个完整的。
7、安装hadoop
把hadoop 2.2.0放在 /usr/local/hadoop
这里要涉及到的配置文件有7个:
/usr/local/hadoop-2.2.0/etc/hadoop/hadoop-env.sh
/usr/local/hadoop-2.2.0/etc/hadoop/yarn-env.sh
/usr/local/hadoop-2.2.0/etc/hadoop/slaves
/usr/local/hadoop-2.2.0/etc/hadoop/core-site.xml
/usr/local/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
/usr/local/hadoop-2.2.0/etc/hadoop/mapred-site.xml
/usr/local/hadoop-2.2.0/etc/hadoop/yarn-site.xml
以上个别文件默认不存在的,可以复制相应的template文件获得。
Yarn(这个吊框架hadoop1.X里面记得是没有的)中由于启动 HDFS 分布式文件系统和启动 MapReduce 框架分离,JAVA_HOME 需要在 hadoop-env.sh 和 Yarn-env.sh 中分别配置
配置文件1:hadoop-env.sh
修改JAVA_HOME值 export JAVA_HOME=/usr/local/jdk
配置文件2:yarn-env.sh
修改JAVA_HOME值 export JAVA_HOME=/usr/local/jdk
配置文件3:slaves (这个文件里面保存所有slave节点)
写入以下内容:
hadoop2
hadoop3
配置文件4:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/root/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>
配置文件5:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop1:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/root/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
配置文件6:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
</configuration>
配置文件7: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>hadoop1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop1:8088</value>
</property>
</configuration>
3、复制到其他节点
这里我直接在命令行里操作,此时hadoop2和hadoop3还是傻逼就是说什么都没有呢。
拷贝jdk文件夹到hadoop2和hadoop3
scp -r /usr/local/jdk/ root@hadoop2:/usr/local/
scp -r /usr/local/jdk/ root@hadoop3:/usr/local/
拷贝hadoop文件夹到hadoop2和hadoop3
scp -r /usr/local/hadoop-2.2.0/ root@hadoop2:/usr/local/
scp -r /usr/local/hadoop-2.2.0/ root@hadoop3:/usr/local/
然后到了配置环境变量的时候了,先弄hadoop1的
gedit /etc/profile
在最上面加入
JAVA_HOME=/usr/local/jdk
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
HADOOP_HOME=/root/hadoop-2.2.0
PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
export JAVA_HOME HADOOP_HOME CLASSPATH PATH
保存退出然后 source /etc/profile 刷新一下就ok了 可以试一下 java -version看看有没有出来。
然后复制/etc/profile到hadoop2和hadoop3 怎么复制我就不写了 参照上面。
这时候三个机器就配置完了。
8、跑一跑吧,
初始化Hadoop
格式化namenode , hadoop namenode -format
启动hdfs, start-dfs.sh
输入 jps 看看除了jps之外还有哪些java进程
此时在hadoop1上面运行的进程有:namenode secondarynamenode
hadoop2和hadoop3上面运行的进程有:datanode
启动yarn: ./sbin/start-yarn.sh
此时在hadoop1上面运行的进程有:namenode secondarynamenode resourcemanager
hadoop2和hadoop3上面运行的进程有:DataNode NodeManager
查看HDFS NameNode: http://hadoop1:50070
查看RM: http://hadoop1:8088/cluster
9、小结
终于写完了 总结一下吧,让hadoop集群环境跑起来其实很简单,下面列出一下经常遇到的困难:
如果你多次hadoop namenode -format了就出问题了,造成namenode 和datanode的clusterID不一致,解决办法我在网上找到两个,第一个比较笨就是修改每一个datanode上面的CID(位于~/dfs/data/current/VERSION文件夹中)使其和namenode上(位置在~/dfs/name/current/VERSION)致,第二种就是都删掉。
至于乱七八糟的错误就看log在百度吧,
这是在博客园的第一篇,感觉丑爆了,“开发者的网上家园”为啥给程序猿的视觉效果这么差 还是我不会用 这排版感觉不会有多少人喜欢看。