好久没写博客了,由于工作原因最近开始研究hadoop。hadoop是现在比较热门的一个技术,主要处理分布式海量数据的运算,hadoop之外还衍生出了hive和pig以及hbase。hadoop的学习和研究主要掌握两个关键词:HDFS和MapReduce。今天先来记录一下hadoop的安装和遇到的一些问题积累,属于初级的初级。
安装环境:win7+cygwin,cygwin的安装参考了网络上的一些资料
- 安装cygwin
- 安装 SSH 守护进程
Hadoop分布式运行需要 SSH 。所以这一部分介绍在 Cygwin 下配置 SSH 守护进程。
chmod+r /etc/group
chmod+r /etc/passwd
chmod+rwx /var
ssh-host-config
When asked if privilegeseparation should be used, answer no .
记着一定要答no,否则用Hadoop-Ecliple Plugin插件进行开发时,会提示你没有权限操作文件,不能写等错误。(我因为这个问题头痛了好长 时间,最后才找到是这里出现问题的。)
· When asked if sshd should be installed as a service, answer yes .
· When asked about the value of CYGWIN environment variable enterntsec .
配置完后,启动SSHD 守护进程
运行:n et start sshd 或者通过 Windows 服务,启动 CYGWINSSHD 服务 .
想要停止服务运行:n et stop sshd 就可以了
e.生成密钥
$ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
f.测试
最后运行以下命令测试
sshlocalhost
- 安装hadoop:
tarzxf hadoop-0.20.1.tar.gz
安装完成之后,就可以在桌面启动cygwin,一个linux的模拟环境,进入hadoop目录/start-all.sh就可以启动hadoop了。
遇到的一些问题汇总:
解决Hadoop报Name node is in safe mode 错误
强制离开安全模式
./hadoop dfsadmin-safemode leave
HDFS InvalidInputException
进入目录/home/wei.li/filein执行命令,上传到HDFS
$/home/wei.li/hadoop-0.20.2/bin/hadoop fs -put filein input
格式化
bin/hadoop namenode-format
ClassNotFound:
jar文件中设置MainClass
删除HDFS文件
/home/wei.li/hadoop-0.20.2/bin/hadoopfs -rmr input
执行hadoop jar
/home/wei.li/hadoop-0.20.2/bin/hadoopjar wordcount.jar input output
启动时报错:
java.lang.NoClassDefFoundError:org/apache/hadoop/util/PlatformName
- 修改bin/hadoop-config.sh 190 行
- JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m -classpath ${HADOOP_COMMON_HOME}/hadoop-common-0.21.0.jar org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
查看hdfs文件:$/home/wei.li/hadoop-0.21/bin/hadoop dfs -ls
无法HDFS put 文件:
1.0.21:core-site.xml
<property>
<name>mapred.child.tmp</name>
<value>/home/wei.li/temp</value>
</property>
2./hadoopnamenode -format
./start-all.sh
hdfs通过浏览器访问报错,put数据时报错:could onlybe replicated to 0 nodes, instead of 1
检查hadoop配置文件core_site.xml中的hadoop.tmp.dir目录