设为首页 收藏本站
查看: 1193|回复: 0

[经验分享] 在 Linux 服务器上搭建和配置 Hadoop 集群

[复制链接]

尚未签到

发表于 2017-12-17 23:31:12 | 显示全部楼层 |阅读模式
  实验条件:3台centos服务器,jdk版本1.8.0,Hadoop 版本2.8.0
  注:hadoop安装和搭建过程中都是在用户lb的home目录下,master的主机名为host98,slave的主机名分别是host99和host101。
  1. ssh远程连接服务器
  ssh [username]@hostname
  2. 创建新用户并创建用户的home主目录
  useradd -d /home/lb lb -m
  3. 将当前用户加入sudo用户组中,方便在不修改当前用户组权限的情况下,对某些文件和目录做修改
  vi /etc/sudoers
  在 root  ALL = (ALL)  ALL 下添加一行 lb  ALL = (ALL)  ALL
  4. 下载jdk并配置环境变量
  1. 用sudo权限创建存放目录
  sudo mkdir /etc/java
  2. 用curl命令从官网下载最新的jdk
  curl -L "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz" -H "Cookie: oraclelicense=accept-securebackup-cookie" -H "Connection: keep-alive" -O
  从浏览器上得到的下载链接并不是最终的压缩包位置,在这其中经过了3次重定向,所有使用-L参数可以自动对链接进行重定向,第一个-H命令传递了同意证书的cookie,第二个-H命令保持连接的稳定,否则下载速度可能很慢。-O命令才能下载文件,否则只是将内容输出到控制台。
  3. 将压缩包解压到当前目录下
  sudo tar -zxvf jdk-8u131-linux-x64.tar.gz
  4. 配置环境变量
  #set Java Environment
  export JAVA_HOME=/usr/java/jdk1.8.0

  export>  export PATH="$JAVA_HOME/bin:$PATH"
  export JRE_HOME=$JAVA_HOME/jre
  修改完成后,在命令行执行source /etc/profile命令使文件生效。使用java -version可察看当前java版本。
  5. 手动设置系统默认JDK(不知是否必要)
  sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk/bin/java 300
  sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk/bin/javac 300
  sudo update-alternatives --config java
  5. 在CentOS上安装openssh服务并配置免密钥登陆
  1. 安装openssh服务
  yum install openssh
  yum install openssh-server
  yum install openssh-clients
  对应的删除命令将install改为remove。
  2. 修改 sshd_config 配置文件
  vi /etc/ssh/sshd_config 启用以下三行
  RSAAuthentication    yes
  PubkeyAuthentication    yes
  AuthorizedKeysFile
  保存并退出,使用 service sshd start 启用ssh服务。
  3. 设置当前用户免密钥登陆
  进入用户主目录应该存在 .ssh 子目录,否则创建。
  执行 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 在 ~/.ssh 子目录下生成公钥和私钥文件。ssh-keygen 代表生成密钥;-t 表示指定生成的密钥类型,rsa 和 dsa 均可;-P 用于提供密语,为空;-f 指定生成的密钥文件。
  cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 将用于认证的公钥加到保存的公钥文件中,密钥和公钥就像是钥匙和锁的关系,公钥加入到在被连接的主机的authorized_keys文件中,私钥自己保存。
  注意修改 authorized_keys 文件和 .ssh 子目录的访问权限,很重要!
  chmod 600 ~/.ssh/authorized_keys
  chmod 700 ~/.ssh
  完成以上操作后就可以通过 ssh localhost 完成本机的无密钥访问。
  6. 安装并配置hadoop
  1. 下载并解压hadoop
  通过 http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz 在本机上下载hadoop压缩文件后,使用scp命令进行远程拷贝到服务器。
  scp /Users/hope/Downloads/hadoop-2.8.0.tar.gz lb@10.3.242.98:/home/lb
  将本地路径下的 hadoop-2.8.0.tar.gz 拷贝到远程服务器 [[用户名 @ ] 主机地址 : 路径
  tar -zxvf hadoop-2.8.0.tar.gz 进行解压
  2. 伪分布 Hadoop 配置
  可以把伪分布式的Hadoop看作是只有一个节点的集群,在这个集群中,这个节点既是Master,也是Slave;既是Namenode,也是DataNode;既是JobTracker,也是TaskTracker。
  需要修改hadoop安装目录下 ./etc/hadoop 中的配置文件。
  1. 指定 jdk 的安装位置
  修改 hadoop-env.sh 文件,加上 export JAVA_HOME=/usr/java/java1.8.0 为jdk的安装路径。
  2. 配置 HDFS 的地址及端口号
  修改 hadoop 核心的配置文件 core-site.xml :
  <configuration>
  <property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:9000</value>
  </property>
  </configuration>
  上述配置增加了property,这样就可以通过指定的web访问hdfs的地址。
  3. 配置 HDFS 的具体属性
  修改 hdfs-site.xml 文件:
  <configuration>
  <property>
  <name>dfs.replication</name>
  <value>1</value>
  </property>
  </configuration>
  原本每个数据块默认的备份数为3,在单机版的hadoop中,需要将其改为1。
  4. 配置 MapReduce 的相关信息
  修改 mapred-site.xml 文件:
  <configuration>
  <property>
  <name>mapred.job.tracker</name>
  <value>localhost:9001</value>
  </property>
  </configuration>
  5. 格式化 hadoop 的文件系统 HDFS
  进入 hadoop 安装目录下的二进制可执行文件夹,执行格式化文件
  bin/hadoop namenode -format
DSC0000.png

  返回结果如上图所示,Exiting with status 0 表示格式化成功,如果是1的话代表存在错误。倒数第五行也有说 successfully formatted 。
  6. 启动 NameNode 和 DataNode
  跟启动有关的可执行二进制文件都在hadoop安装目录的sbin子目录下。
  sbin/hadoop-daemon.sh start namenode  用于启动namenode
  sbin/hadoop-daemon.sh start datanode  用于启动datanode 
  用 jps 命令可以察看这两种进程的启动情况。
  然后就可以用 Web 浏览器察看dfs的情况了,默认端口是50070。如果是本机访问,就是 http://localhost:50070;如果通过公网访问,就是 http://ip地址:50070。
  7. 启动 hadoop
  sbin/start-all.sh 命令可用于启动整个hadoop服务
  3. hadoop 集群的配置
  1. hadoop 集群的配置至少需要三台 Linux 服务器,首先给集群中的每台机器分配角色
  10.3.242.98-master, namenode, jobtracker-host98(主机名)
  10.3.242.99-slave, datanode, tasktracker-host99(主机名)
  10.3.242.103-slave, datanode, tasktracker-host101(主机名)
  2. 在三台主机上创建相同的用户 lb (这是 hadoop 的基本要求),普通用户即可,加入 sudoer 用户组
  3. 安装 jdk ,配置环境变量
  4. 修改 /etc/hosts 文件,用于定义局域网内主机名与IP地址的映射关系,可以通过主机名进行远程连接
  127.0.0.1 localhost
  10.3.242.98 host98
  10.3.242.99 host99
  10.3.242.101 host101
  5. 安装ssh,配置不用主机间的免密钥登陆
  在重新安装ssh后,一定要记得修改/etc/ssh/sshd_config文件,使用service sshd start命令启动服务。否则中断当前连接后可能无法使用ssh重新连接服务器。
  比如要从host98主机免密钥登陆host99,就将host98主机生成的公钥加入到host99的authorized_keys文件中:
  scp lb@host98:~/.ssh/is_rsa.pub lb@host99:~/.ssh/host99_rsa.pub
  在host98主机下, cat ~/.ssh/host99_rsa.pub >> ~/.ssh/authorized_keys 即可。
  对三台主机两两执行上述操作,使得每两台主机间都可以实现免密钥登陆。因为有可能 jobtracker 不是 master。
  6. 配置三台主机的hadoop配置文件
  1. etc/hadoop/hadoop-env.sh
  export JAVA_HOME=/usr/java/jdk1.8.0  加上java的环境变量
  2. etc/hadoop/core-site.xml
  <configuration>
  <property>
  <name>fs.default.name</name>
  <value>hdfs://host98:9000</value>
  </property>
  <property>
  <name>hadoop.tmp.dir</name>
  <value>/tmp</value>
  </property>
  </configuration>
  第一个资源声明的是访问hdfs的web浏览器地址,host98是master主机名,也可以用ip地址替换。
  第二个资源声明的是在格式化分布式文件系统时所产生的临时文件的存储地址,有时不能重新格式化文件系统是因为临时文件夹下有同名文件,需要将文件夹清空后才可以正常格式化。(通过报错信息可以知道)
  3. etc/hadoop/hdfs-site.xml
  <configuration>
  <property>
  <name>dfs.replication</name>
  <value>2</value>
  </property>
  </configuration>
  声明数据块的备份个数
  4. etc/hadoop/mapred.site.xml.template
  <configuration>
  <property>
  <name>mapred.job.tracker</name>
  <value>host98:9001</value>
  </property>
  </configurantion>
  声明jobtracker节点,为master主机host98,端口为9001
  5. etc/hadoop/slaves
  在slaves文件中添加作为slave的主机名
  host99
  host101
  7. 启动hadoop服务(均是在主机host98执行命令,会自动调用slave节点完成相应操作)
  1. 格式化hdfs系统
  bin/hadoop namenode -format
  会完成hdfs文件系统的格式化,在临时文件的文件夹下会生成很多临时文件,在下一次格式化之前,一定要把这些临时文件夹清空,否则会格式化失败。
  2. 启动dfs服务
  sbin/start-dfs.sh
  会在master主机运行namenode进程,在所有的datanode节点运行datanode进程。
  在启动服务的过程中,出现了部分slave节点没有运行datanode进程的情况,在slave节点单独开启datanode服务会出现问题的反馈,原因是由于其他进程占用了50010端口。解决的方式有两种:1. 结束原本占用50010端口的进程;2. 更改datanode的端口。
  使用 netstat -a -t --numeric-ports -p 命令察看正在占用50010端口的进程号,使用kill 进程号杀死该进程后重新启动dfs服务,所有的slave节点都启动了datanode进程。
  3. 启动yarn服务
  sbin/start-yarn.sh
  新版的hadoop2.*不存在 jobtracker 进程和 tasktarcker 进程,取而代之的是 sourcemanager 和 nodemanager。
  在这个过程中出现了slave节点成功运行 nodemanager 进程,但是master节点没有运行 sourcemanager 进程,出现问题的原因不会在终端界面显示,需要自己去察看 logs 子目录中的日志记录。显示如下:
  NodeStatusUpdaterImpl failed in state STARTED; cause: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.ConnectException: Call From         host99/10.3.242.99 to 0.0.0.0:8031 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:          http://wiki.apache.org/hadoop/ConnectionRefused
  可以看到问题与之前的一样,是8031端口被占用,使用同样的方法查找占用8031端口的进程号后杀死进程,重新启动服务后成功。
  4. 成功的标识
  host98主机(master):
[lb@host98 ~]$jps

  5904 ResourceManager
  21028 SecondaryNameNode
  20743 NameNode
  1225 Jps
  host99和host101主机(slave):
[lb@host99 ~]$jps

  11316 Jps
  12568 DataNode
  11117 NodeManager
  至此,在服务器上从 添加用户 到 安装jdk并配置环境变量 到 安装并配置ssh免密钥登陆 到 安装配置hadoop单机模式、伪分布模式和集群模式的所有过程 均已有所呈现。  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425196-1-1.html 上篇帖子: windows下eclipse远程连接hadoop集群开发mapreduce 下篇帖子: 构建高可靠hadoop集群之3- Quorum Journal Manager
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表