一台阿里云2台腾讯云服务器搭建Hadoop集群

来源:互联网 发布:linux gcc编译器 编辑:程序博客网 时间:2024/05/16 18:29


1.准备工作:jdk安装(个人选择的1.8版本)
2.ssh免密登陆:
关闭放火墙(可以将要开放的端口加入防火墙的开发端口中,学习用就直接关闭防火墙了):
1)关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd

2) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconfig/iptables 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

3)vi /etc/hosts
ip1 master
ip2 slave1
ip3 slave2
此处特别注意下,我自己由于这个地方出问题导致Hadoop集群延迟启动3,4天,那种感觉实在是难受。。。
问题是:如果是在master上操作的话ip1 必须是master 的内网ip 同理slaves上也是一样,自己的主机上的IP要改成内网IP,其他的要用外网IP。
补充网络知识:服务器公网ip
  可以用于域名解析ip,服务器远程登录ip,是最主要的服务器ip地址。
   内网ip
  不能用于域名解析。
  不可以直接用于服务器远程登录,其主要作用是:跟当前帐号下的其他同集群的机器通信。
  一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP,内网IP是在规划IPv4协议时,考虑到IP地址资源可能不足,就专门为内部网设计私有IP地址(或称之为保留地址),一般常用内网IP地址都是这种形式的:10.X.X.X、

172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是,内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
  公网IP就是除了保留IP地址以外的IP地址,可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址,其实就是指的公网 IP。互联网上的每台计算机都有一个独立的IP地址,该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。
  其实,互联网上的计算机是通过“公网IP+内网IP”来唯一确定的,就像很多大楼都是201房间一样,房间号可能一样,但是大楼肯定是唯一的。公网
IP地址和内网IP地址也是同样,不同企业或学校的机器可能有相同的内网IP地址,但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样
IP地址共享的呢?这就需要使用NAT(Network Address Translation,网络地址转换)功能。当内部计算机要连接互联网时,首先需要通过NAT技术,将内部计算机数据包中有关IP地址的设置都设成
NAT主机的公共IP地址,然后再传送到Internet,虽然内部计算机使用的是私有IP地址,但在连接Internet时,就可以通过NAT主机的
NAT技术,将内网我IP地址修改为公网IP地址,如此一来,内网计算机就可以向Internet请求数据了。——百度百科
此处master的IP对于slaves是公网IP,但是对于master自己应该用内网IP—正真的对应自己的机器的ifconfig。
以上在master,salve1和slave2上都要执行,为了方便,jdk的安装目录最好一样,之后的目录操作也是。

4)在所有的主机上创建Hadoop用户:
adduser hadoop–用户名
passwd 123456–密码
新创建的用户并不能使用sudo命令,需要给他添加授权。
sudo命令的授权管理是在sudoers文件里的。可以看看sudoers:
[root@localhost ~]# whereis sudoers
sudoers: /etc/sudoers /etc/sudoers.d /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz
找到这个文件位置之后再查看权限:
[root@localhost ~]# ls -l /etc/sudoers
-r–r—– 1 root root 4251 9月 25 15:08 /etc/sudoers
是的,只有只读的权限,如果想要修改的话,需要先添加w权限:
[root@localhost ~]# chmod -v u+w /etc/sudoers
mode of “/etc/sudoers” changed from 0440 (r–r—–) to 0640 (rw-r—–)
然后就可以添加内容了,在下面的一行下追加新增的用户:
[root@localhost ~]# vim /etc/sudoers

Allow root to run any commands anywher

root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL #这个是新增的用户
wq保存退出,这时候要记得将写权限收回:
[root@localhost ~]# chmod -v u-w /etc/sudoers
mode of “/etc/sudoers” changed from 0640 (rw-r—–) to 0440 (r–r—–)
这时候使用新用户登录,使用sudo:
[root@localhost ~]# su hadoop
输入密码
[hadoop@localhost ~]$ sudo cat /etc/passwd
[sudo] password for hadoop:

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.#2) Think before you type.#3) With great power comes great responsibility.

第一次使用会提示你,你已经化身超人,身负责任。而且需要输入密码才可以下一步。如果不想需要输入密码怎么办,将最后一个ALL修改成NOPASSWD: ALL。

5)安装ssh,由于云服务器都有自带,不在赘述。

接下来有关Hadoop集群的操作,务必在Hadoop用户下进行操作。
ssh master ssh-keygen –t rsa
此时在master节点主机的~/.ssh目录生成密钥对id_rsa和di_rsa.pub,可以通过ls命令列表查看。
ssh slave1 ssh-keygen -t rsa
ssh slave2 ssh-keygen -t rsa

将刚刚生成的密钥对中的公钥复制到master节点的~/.ssh/目录之下
scp hadoop@slave1:~/.ssh/id_rsa.pub ~/.ssh/slave1.pub
scp hadoop@slave2:~/.ssh/id_rsa.pub ~/.ssh/slave2.pub

将master、slave1、slave2主机的公钥写入master主机~/.ssh目录的认证文件authorized_keys中
cat ~/.ssh/*.pub > ~/.ssh/authorized_keys
用chmod命令修改认证文件authorized_keys的属性为600
chomd 600 ~/.ssh/authorized_keys

将~/.ssh/authorized_keys认证文件复制到所有节点主机的~/.ssh/目录中,并进行免密码连接测试。

ssh slave1
exit;
ssh slave2
exit;

mkdir /home/hadoop/chadoop
cd /home/hadoop/chadoop
mkdir hadoop
cd hadoop
如果有下载好的安装包可以直接利用ssh工具将那个安装包传到这个文件夹下,我的是Hadoop2.5.0
tar -zxvf xxxx.gz
cd xxxx
进入Hadoop的根目录
mkdir tmp
mkdir dfs
cd dfs
mkdir data
mkdir name

vi ~/.bash_profile
(此处附上我的配置文件,请根据自己的需求更改,另外每次想要快捷的使用命令之前都需要source ~/.bash_profile,否则需要去相应的目录下操作)

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport HADOOP_HOME=/home/hadoop/chadoop/hadoop/hadoop-2.5.0export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"export ZOOKEEPER_HOME=/home/hadoop/chadoop/zookeeper/zookeeper-3.4.6export HBASE_HOME=/home/hadoop/chadoop/hbase/hbase-1.1.2export HIVE_HOME=/home/hadoop/chadoop/hive/apache-hive-0.13.0-binexport CLASSPATH=$CLASSPATH:$HIVE_HOME/libexport PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/confexport PIG_HOME=/home/hadoop/chadoop/pig/pig-0.16.0export PATH=$PATH:$PIG_HOME/binexport PIG_CLASSPATH=$HADOOP_HOME/etc/hadoopexport HIVE_CLASSPATH=$HADOOP_HOME/etc/hadoopexport SQOOP_HOME=/home/hadoop/chadoop/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alphaexport PATH=$PATH:$SQOOP_HOME/binexport SPARK_HOME=/home/hadoop/chadoop/spark/spark-2.1.1-bin-hadoop2.6/export PATH=$PATH:$SPARK_HOME/binexport OOZIE_HOME=/home/hadoop/chadoop/oozie/oozie-4.3.0export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0export PATH=$PATH:$MAVEN_HOME/binexport OOZIE_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0export PATH=$PATH:$MAVEN_HOME/binexport OOZIE_URL=http://47.93.10.102:11000/oozieexport CATALINA_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/oozie-serverexport PATH=${CATALINA_HOME}/bin:${OOZIE_HOME}/bin:$PATHexport OOZIE_CONFIG=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/confexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$OOZIE_HOME/bin:$PATHexport HADOOP_HOME_WARN_SUPPRESS=not_null

hadoop-2.8.0/etc/hadoop目录下的文件(core-site.xml,hdfs-site.xml, mapred-site.xml, yarn-site.xml,hadoop-env.sh, mapred-env.sh,yarn-env.sh 和slaves)

core-site.xml<configuration> <property>  <name>fs.defaultFS</name>  <value>hdfs://master:8020</value> </property><property>  <name>io.file.buffer.size</name>  <value>131072</value> </property> <property>  <name>hadoop.tmp.dir</name>  <value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/tmp</value>  <description>Abasefor other temporary directories.</description> </property> <property>  <name>hadoop.proxyuser.hadoop.hosts</name>  <value>master</value> </property><property>  <name>hadoop.proxyuser.hadoop.groups</name>  <value>*</value> </property><!-- 指定zookeeper地址 -->                <property>                    <name>ha.zookeeper.quorum</name>                    <value>master:2181,slave1:2181,slave2:2181</value>                </property></configuration>hdfs-site.xml<configuration> <property>  <name>dfs.namenode.secondary.http-address</name>  <value>master:9001</value>  <description>备份namenode的http地址</description> </property>  <property>   <name>dfs.namenode.name.dir</name>   <value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/dfs/name</value>   <description>namenode的目录位置</description> </property> <property>  <name>dfs.datanode.data.dir</name>  <value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/dfs/data</value>  <description>datanode's address</description>  </property> <property>  <name>dfs.replication</name>  <value>3</value>  <description>hdfs系统的副本数量</description> </property><property>     <name>dfs.permissions</name>     <value>false</value></property> <property>  <name>dfs.webhdfs.enabled</name>  <value>true</value> </property><property> <name>dfs.datanode.max.xcievers</name> <value>4096</value> </property></configuration>mapred-site.xml(有一个是模板cp 一个新的出来)<configuration><property>   <name>mapreduce.framework.name</name>   <value>yarn</value>   <description>指明mapreduce的调度框架为yarn</description> </property> <property>  <name>mapreduce.jobhistory.address</name>  <value>master:10020</value>  <description>指明mapreduce的作业历史地址</description> </property> <property>  <name>mapreduce.jobhistory.webapp.address</name>  <value>master:19888</value>  <description>指明mapreduce的作业历史web地址</description> </property></configuration>yarn-site.xml<configuration><!-- Site specific YARN configuration properties --><property>   <name>yarn.nodemanager.aux-services</name>   <value>mapreduce_shuffle</value>  </property><property>                <name>yarn.resourcemanager.hostname</name>                <value>master</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>master:50066</value>  </property>  <property>   <name>yarn.resourcemanager.scheduler.address</name>   <value>master:50067</value>  </property>  <property>   <name>yarn.resourcemanager.resource-tracker.address</name>   <value>master:50068</value>  </property><property>   <name>yarn.resourcemanager.admin.address</name>   <value>master:50069</value>  </property>  <property>   <name>yarn.resourcemanager.webapp.address</name>   <value>master:8088</value>  </property><property>                       <name>yarn.resourcemanager.zk-address</name>                       <value>master:2181,slave1:2181,slave2:2181</value>                    </property></configuration>

hadoop-env.sh,mapred-env.sh,yarn-env.sh
加入jdk目录:export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
vi slaves

master
slave1
slave2

scp ~/.bash_profilehadoop@slave1:~/
scp ~/.bash_profilehadoop@slave2:~/

ssh hadoop@slave1 . ~/.bash_profile
ssh hadoop@slave2 . ~/.bash_profile

scp -r chadoop/hadoop@slave1:~
scp -r chadoop/hadoop@slave2:~
(还是建议直接用ssh工具再做一次工作,实在是慢~)

在master节点主机上格式化hdfs文件系统
hdfs namenode -format

start-all.sh
jps
2646 NodeManager
24038 Jps
2380 SecondaryNameNode
2524 ResourceManager
11373 RunJar
13726 NameNode
2223 DataNode
(master节点有4个ResourceManager, Jps, NameNode, SecondaryNamenode,slave1与slave2有3个NodeManager, DataNode, Jps)

在hdfs文件系统里面操作。首先,用-mkdir命令在hdfs中创建一个mydir目录,然后用-put命令上载文件,步骤如下:
hdfs dfs -mkdir /mydir
hdfs dfs -put ** (文件) /mydir
hdfs dfs -ls /mydir
hadoop jar~/chadoop/hadoop/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jarwordcount /mydir/* /mydir/output
每个mr程序需要不同的输出目录,相同已存在需要重新命名或删除。
netstat -antpl|grep xxxx
查看端口号是否监听
结果查看(hdfs dfs -cat/mydir/output/part-r-00000)
可以在浏览器中用master的外网IP:8088或50070查看刚刚的一些操作,也可以看看datanode的状态。

欢迎评论。

阅读全文
0 0
原创粉丝点击