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


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_131
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop/chadoop/hadoop/hadoop-2.5.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export ZOOKEEPER_HOME=/home/hadoop/chadoop/zookeeper/zookeeper-3.4.6
export HBASE_HOME=/home/hadoop/chadoop/hbase/hbase-1.1.2
export HIVE_HOME=/home/hadoop/chadoop/hive/apache-hive-0.13.0-bin
export CLASSPATH=$CLASSPATH:$HIVE_HOME/lib
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
export PIG_HOME=/home/hadoop/chadoop/pig/pig-0.16.0
export PATH=$PATH:$PIG_HOME/bin
export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HIVE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export SQOOP_HOME=/home/hadoop/chadoop/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=$PATH:$SQOOP_HOME/bin
export SPARK_HOME=/home/hadoop/chadoop/spark/spark-2.1.1-bin-hadoop2.6/
export PATH=$PATH:$SPARK_HOME/bin
export OOZIE_HOME=/home/hadoop/chadoop/oozie/oozie-4.3.0
export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0
export PATH=$PATH:$MAVEN_HOME/bin
export OOZIE_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0
export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0
export PATH=$PATH:$MAVEN_HOME/bin
export OOZIE_URL=http://47.93.10.102:11000/oozie
export CATALINA_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/oozie-server
export PATH=${CATALINA_HOME}/bin:${OOZIE_HOME}/bin:$PATH
export OOZIE_CONFIG=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/conf

export 
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_H
OME/bin:$OOZIE_HOME/bin:$PATH
export 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的状态。

欢迎评论。

评论 24 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

gakki_smile

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值