作为一个liunx的菜鸟,搭建Hadoop集群过程中遇到了很多的问题!为了以后的学习的方便,我将记下搭建的主要步骤及遇到的问题和问题的解决方法!
在这次搭建的过程中,我为了简化权限问题,将直接用Root用户的身份登录,但是Ubuntu在默认的情况下并没有开启Root用户,所以需要做以下的设置:
一.开启Root用户
sudo -s
vim /etc/lightdm/lightdm.conf
在该文件下添加:
[SeatDefaults]
greeter-session=unity-greeter
usr-session=ubuntu
greeter-show-manual-login=true
allow-guest=false
之后就是启动root账户:sudo passwd root
在重启动系统reboot -h now
二.配置Java环境
主要学到的命令:1.mkdir file(创建文件夹)
2. mv 路径1 路径2(将文件从路径1下移动到路径2下)
3.tar -xvf 文件(解压文件)
4.vim ~/.bashrc(修改环境变量)
5.source ~/.bashrc(使修改文件生效)
三.安装ssh
在安装ssh的时候遇到了很多问题。
**问题一、
apt-get install openssh-server后,
/etc/init.d/ssh start 启动服务
ps -e |grep ssh 查看服务有没有启动
发现并没有ssh 服务运行的端口**。最后进行一系列的百度,谷歌。发现得出的结论是:1、没有安装ssh。2、防火墙问题。
最后的解决方法是: 将之前装的ssh卸载掉,然后重新安装只不过在安装服务时,先安装client。之前是因为ubuntu自带ssh client。所以没有注意。
apt-get install openssh-client
apt-get install openssh-server
/etc/init.d/ssh start 启动服务
ps -e |grep ssh 查看服务有没有启动
发现了sshd的端口。
因为要三台虚拟机要进行免密码互通。首先分别在各机子的/etc/hostname中修改主机名。分别改为Master,Slave1,Slave。然后修改/etc/hosts。这里是地址和对应主机名。在Master中就加入Master的主机名和他对应的IP。在两个子节点主机上将这三台的主机名和其分别对应的IP都写入/etc/hosts。能互ping就可以了。
现在是要使三台机子的能ssh免密码登录,第一种方法是:这时需要将这三台机子产生的秘钥中的公钥分别拷到对方的电脑。产生秘钥的命令是:ssh-keygen -t 名字。
第二种方法是:将Master中的秘钥IDcopy到Slave1,Slave2中去。命令是 ssh copy-id root@Slave1
这时候发现第一次登录时候需要密码,而且正确输入密码都无法登录上去。其实这是因为我们这些操作都是在Root用户下进行的。ssh在默认的时候不允许root登录。需要在Slave1中的/etc/ssh/sshd-config中修改PermitRootLogin 后面的规定改为yes。在重启Slave1中的ssh
可输入以下命令:
/etc/init.d/ssh restart
/etc/init.d/ssh stop
/etc/init.d/ssh start
service ssh start
service ssh stop
四、安装rsync
1、安装Hadoop。将安装包mv到指定文件夹中。然后解压。
2、在hadoop-env.sh中机上Java的安装路径,即JAVA_HOME。source命令是文件信息生效。
3、分布式模式的配置
1)、core-site.xml ,配置HDFS的地址和端口号
2)、HDFS的配置文件hdfs-site.xml,配置replication
3)、MapReduce的配置文件mapred-site.xml,配置JobTracker地址和端口。
这个配置过程网上教程有很多,书上也有很多。比如我用的就是《大数据Spark企业级实战》讲的很详细。
最后都配置好了。可以启动Hadoop集群了!!!
五、启动Hadoop集群
可是,问题又来了。。。
执行Hadoop namenode -format
start-all.sh
jps后发现nodedate没有启动。
网上发现一系列的解决方法,最后发现解决我启动问题的方法是:
删除DataNode的所有资料(及将集群中每个datanode的/hdfs/data/current中的VERSION删掉,然后执行hadoop namenode -format重启集群,错误消失。<推荐>);第二种方法是修改每个DataNode的namespaceID(位于/hdfs/data/current/VERSION文件中)<优先>或修改NameNode的namespaceID(位于/hdfs/name/current/VERSION文件中),使其一致。我用的是第一种方法。
这个问题是因为我多次format namenode 造成生成的datanode id 和namenode id 不一致。所以删除后之前产生的都没了。以后启动不用格式化format,z只需要启动就行了!!!
这是我搭建过程遇到的问题。现在记着,供以后学习参考!初学者,可能理解不到位。
下面这两种方法在实际应用中也可能会用到。(我还没用到,先记着!)
1)重启坏掉的DataNode或JobTracker。当Hadoop集群的某单个节点出现问题时,一般不必重启整个系统,只须重启这个节点,它会自动连入整个集群。
在坏死的节点上输入如下命令即可:
bin/Hadoop-daemon.sh start DataNode
bin/Hadoop-daemon.sh start jobtracker
2) 动态加入DataNode或TaskTracker。这个命令允许用户动态将某个节点加入集群中。
bin/Hadoop-daemon.sh –config ./conf start DataNode
bin/Hadoop-daemon.sh –config ./conf start tasktracker