hadoop集群把我配置得要吐血,从各种无厘头的问题的出现到疯狂无脑搜索问题的解决方案,青春一点一点地被虚度。
好吧废话不说,以下是我总结的配置步骤:
1, 装Linux的时候将机群每台机器都配置成不同的机器名为 hostname1,hostname2,………. 每台机器上都有个同名的用户,最好有管理员权限方便操作,选一台比较可靠的机器作为主机,以后的操作都在主机上进行。(以下规定主机名叫master 其余叫slave)
2,命令行里输入ssh,如果该命令无法识别则需要先安装ssh 用apt-get安装即可。如果已经装过则跳过这步
3,试试输入ssh xxx.xxx.xxx.xxx(其他机器ip)。如果不要求输入密码则跳过该步,如果需要密码则按如下步骤操作:命令行输入 ssh–keygen –t rsa, ssh和-keygen之间无空格。全部确定 让输入y/n 就输入y。然后输入 ls .ssh可以看到生成了个叫id_rsa.pub的文件 .ssh大概是主文件夹里边的一个包含ssh的密码和公钥的隐藏文件夹,用scp命令把.ssh文件夹里的id_rsa.pub 拷贝到各个机器包括主机 格式为 scp .ssh/id_rsa.pub slave:.ssh/ id_rsa.pub 然后再把id_rsa.pub拷贝到各个机器重命名为authorized_keys:scp .ssh/id_rsa.pub slave:.ssh/ authorized_keys . 输入ssh别的机器ip 若能登陆其他机器且不要密码就可以了。若scp不能用则用u盘拷 每台机上输入 cat id_rsa.pub路径>>.ssh/authorized_keys
4,配置ip映射:在/etc/hosts 文件的开头加上主机ip以及主机名各副机ip及计算机名,一行一对ip和机器名 试试ssh slave 若能登陆则可。用scp将hosts文件夹拷贝至各个分机
5,下载hadoop 0.21 随便解压到某个文件夹即可,同时把java jdk也下载下来
6,添加环境变量:
把以下三行添加到/etc/profile文件的末尾
export JAVA_HOME=/home/chris/jdk1.6.0_13
export HADOOP_HOME=/home/chris/hadoop-0.21
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
若权限不够执行chmod 777 /etc/profile或者sudo gedit /etc/profile
把以下三行添加到Hadoop0.21/conf/hadoop-env.sh末尾
export JAVA_HOME=/home/chris/jdk1.6.0_13
export HADOOP_HOME=/home/chris/hadoop-0.21.0
export HADOOP_HOME_CONF=%HADOOP_HOME/conf
把Hadoop0.21/conf/hadoop-env.sh文件拷贝到各个分机同一位置
7,配置hadoop的参数。
它的参数以xml格式存在Hadoop0.21/conf/core-site.xml Hadoop0.21/conf/mapred-site.xml Hadoop0.21/conf/hdfs-site.xml 里
格式为
<configuration>
<property>
<name>变量1</name>
<value>值1</value>
</property>
<property>
<name>变量2</name>
<value>值2</value>
</property>
。。。。。。。。。。。。
</configuration>
Hadoop0.21/conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/chris/hadooptmp</value>
</property>
</configuration>
Hadoop0.21/conf/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.jobtracker.address</name>
<value> master:9001</value>
</property>
</configuration>
Hadoop0.21/conf/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(此值在多机器实际运行时最好设为2这样每台机器都会有一个数据备份,运行时数据可以本地读取速度更快)
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/chris/hadoopdata</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/chris/hadoopname</value>
</property>
</configuration>
Hadoop0.21/conf/master:(第一行的机器为主节点,如果不止一行则第二行以后的机器为副主节点。)
Master
Hadoop0.21/conf/slave:(需要哪些机器做分机就写哪些,一个机器一行)
Slave1
Slave2
.。。。。。。。。
8,把hadoop和jdk的文件夹整个拷贝到每个分机。/etc/profile ,Hadoop/Conf文件夹里的配置以主机为准 各个分机无所谓。Hadoop0.21/conf/hadoop-env.sh ,/etc/hosts 每台机器都必须一样。
9,格式化主节点命令行输入hadoop namenode –format 然后输入start-all.sh 即可启动集群。输入jps 主机应该会有namenode jobtracker secondarynamenode 出现 如果主机也同时是slave 则还会有tasktracker和datanode。在各个slave机上输入jps会有datanode和tasktracker
如果这些少一项则可能是配置错误
用命令hadoop dfsadmin –report在主机查看各个分机启动情况 (该命令输入时可能集群没完全启动,若发现没有节点则等会再输入该命令直到出现 (n total, 0 dead) 且下边详细给出每个节点信息为止) 若发现有死节点则可能配置有错,查看hadoop/logs 里的日志来查找错误。
注意每次格式化主节点前务必删除每个节点hadoop.tmp.dir,dfs.data.dir,dfs.name.dir所指定的文件夹以及hadoop/logs里所有文件,否则格式化后集群的副节点会无法启动
浏览器里输入以下网址也可查看,如果有一个页面无法显示则说明配置错误
http://localhost:50030/ - Hadoop 管理介面
http://localhost:50060/ - Hadoop Task Tracker 状态
http://localhost:50070/ - Hadoop DFS 状态
关闭集群使用stop-all.sh
10,开始编程。
下载Eclipse 对于hadoop 0.21 我试过Eclipse的helio Galileo gerrymand 都有致命的问题。所有我推荐用Eclipse官网的最老版本europa,虽然europa还是有问题,但是勉强可以用。下载完后,在hadoop文件夹里搜hadoop-0.21.0-eclipse-plugin.jar搜到后按http://yizhilong28.iteye.com/blog/1030536 里的方法修改。修改后放进Eclipse的plug-in文件夹。
建立hadoop工程,windows->show view->other->map reduce,下边会有个图标为小黄象的选项卡,右键点它,选new hadoop location,左右两边是主机名,端口分别是hadoop/conf里fs.default.name和mapreduce.jobtracker.address的端口。
如果发现选中new hadoop location无效或者连小黄象也没有,或者语法没错但是编译总通不过。那么直接写好代码选file->export->java jar file->代码文件夹 自己随便编一个jar包的名例如 map.jar 主类叫做mymapred.class 打包成jar 即可
运行程序的时候命令行输入hadoop jar map.jar的全路径 mymapred 参数表 即可
如hadoop /home/hadoops/ map.jar mymapred 1000 2000。每次运行前必须把上次运行结果给删了。用hadoop fs –rmr /output
11,建文件夹使用hadoop fs –mkdir 路径
程序里读取的文件必须在hdfs里 使用hadoop –put 源路径 hdfs路径 即可
13,附录 常用命令:
Chmod 777 /etc/profile
sudo gedit /etc/profile
Ssh-keygen –r rsa
Ssh 192.168.1.101
Ssh slave
Scp /home/master/a.txt slave:/home/master/b.txt
Hadoop namenode –format
Hadoop dfsadmin –report
Jps(查看本地java进程)
Hadoop dfsadmin –safemode leave
hadoop fs –mkdir /input
hadoop –put /home/master/data /input
hadoop –get /output/part-00000 /home/master/myoutput.txt