前言
基于我翻译的hadoop集群安装 ,我这次只安装hdfs进程。我仔细翻阅了文章前后,发现没找到太多SecondaryNameNode的资料,所以暂时计划两个DataNode,一个NameNode(如果可以的话,两个)。其中还是有部分需要的说明是在单节点安装的那片文章的。下面的描述我就不注明出处了,只说是怎么搞通的吧。
准备
我这里手上有两个虚拟机centos7,单核2G,20G硬盘。ip分别是:192.168.137.91,192.168.137.90。jdk版本为1.8,hadoop版本为2.9.2 。我计划分别在每台机器上安装一个DataNode和NameNode,如果NameNode只能安装一个,就放在91上
安装
需要先安装软件ssh和rsync,yum安装就可以了,可能系统已经预先安装了。
然后是安装jdk,这里选用的是1.8,暂时还是不太敢用11运行它,先跑通再说吧。具体步骤,参考: https://blog.naturetrible.com/index.php/257/ntbrick/nature/ 然后在各个虚拟机上上传hadoop安装包,解压,我解压的目录是/opt/hadoop。
还需要在相关的机器上军配置host,让机器名指向对应的机器。
配置
这里的配置我就直接参考官方文档了:
- etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk8
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
这个文件我们可以看到HADOOP_CONF_DIR的默认值是/etc/hadoop,暂时我没有改变它
- etc/hadoop/core-site.xml
<configuration>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://0.0.0.0:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hdfs/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hdfs/datanode</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
编辑etc/hadoop/slaves文件
vim /opt/hadoop/etc/hadoop/slaves
192.168.137.91
192.168.137.90
把所有的配置复制到所有的机器上。
无密码登录
在master执行
ssh-keygen -t rsa -P "" //然后直接回车,设置为空密码
这是/root/.ssh目录可以看到id_rsa和id_rsa.pub两个文件
cat id_rsa.pub >> authorized_keys
现在可以无密码登录本机了
cp id_rsa.pub id_rsa_91.pub
然后就将id_rsa_91.pub复制到90的/root/.ssh中
mkdir .ssh
cat id_rsa_91.pub >> .ssh/authorized_keys
需要注意的是,这里需要先登录一次,让对方记住我们ssh过去的主机,否则好像怎么都不会成功。这个有没有通用的配置方法我就不知道。反正过了这一次,我们就可以无阻碍的从91ssh90了。要注意的是,这种无密码登录是单向的,如果想从90无密码登录91,则需要再反过来配置一遍。
启动集群
/opt/hadoop/bin/hdfs namenode -format ntbrick-dev //格式化 ntbrick-dev是我的命名的集群名称
/opt/hadoop/sbin/hadoop-daemon.sh --config /opt/hadoop/etc/hadoop/ --script ntbrick-dev start namenode //启动namenode,把namenode换成datanode就是启动datanode了,这个命令可以在每个节点上单独启动需要的进程
/opt/hadoop/sbin/start-dfs.sh //格式化后直接运行该命令就可以启动集群了,包括namenode,datanode,远程和本地的都会启动,前提是前面的远程配置和slave配置都是ok的
/opt/hadoop/sbin/stop-dfs.sh //关闭集群
这是访问 http://192.168.137.91:50070 可以看到具体的hdfs集群状态
异常处理
无datanode
开始的时候我启动完全没有数据节点,因为我中间一次一次启动等什么的,然后我清空了datanode和namenode的文件夹,重新格式化,启动集群,就好了
Permission denied: user=dr.who, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
这个错误是创建文件夹的时候报的。
修改etc/hadoop/hdfs-site.xml,添加
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
也就是在内部不限制权限。当然了,躲不是个事儿,以后要用到权限的时候我研究清楚了再补嘛。
上传文件失败
我就是在web界面的时候上传失败。
具体情况来说,我尝试使用命令行进行上传,结果,成功了。那么,就是这个功能是好的。网上查了一大圈。我本机使用web界面上传,也需要配置host,让机器名指向对应的机器,就可以上传成功了。