虚拟机Hadoop实战(二)详细步骤,hadoop实战
装Hadoop是个稍微复杂些的过程,加上Hadoop出于安全性的考虑,使用了SSH认证,更是一个比一般软件繁琐的事情。Hadoop基于Java,使用前得安装Java虚拟机。而Hadoop本身并不知道系统配置的Java虚拟机在哪儿,即使在etc/profile文件中设置了Java的环境变量,也需要在Hadoop自身的配置文件hadoop-env.sh(或者说shell程序里面)重新配置一遍。 第二个大头就是安装并配置ssh。这里需要补习一些ssh知识,ssh通过公钥——私钥模式确保安全。公钥其实就相当于一个保险箱,私钥才是真正的钥匙。我把保险箱发给你,你把重要的文件装在箱子里合上。这是个自动锁的保险箱,合上并不需要钥匙,但打开需要。于是你就可以把装着你私密信息的保险箱安全地交给快递员了。ssh认证的相关信息、密钥、认证文件都保存在/home/你的用户名/.ssh文件夹下。文件夹的名字前面有个.说明是个隐藏文件夹,通过普通的ls命令是无法搜索到的。每当有ssh请求发过来,系统都会以对方请求的用户,到该用户下的.ssh文件夹里查看是否有相应的“保险箱”以及“钥匙”。有的话,才能把保险箱发过去,让用户把登录密码装到保险箱里发过来,然后我打开箱子看看对方请求的用户名和密码跟我本机上存储和设定的是否匹配。如果不匹配,就拒绝请求。如果匹配,就接受对方的登录。—————————————————————————————————————————— 所需软件列表: 一、VMware® Workstation 12 Pro 二、Java Development Kits 8(JDK1.8.0_112) 三、Hadoop 2.7.3 四、Putty(包含putty与pscp) 五、OpenSSH(apt-get install openssh-server,忘记装会导致win下putty无法访问linux)
本教程基于已经安装好的linux虚拟机。不建议选择CentOS版本,因为防火墙权限太复杂,新手容易出错。本文使用的Linux 是Ubuntu Server LTS。这里用的JDK是Oracle版本的,而非OpenJDK。
【步骤一】安装OpenSSH的Server 【原因】为了能够让外部电脑通过SSH安全模式访问Linux,为下一步使用win下putty工具传输文件作铺垫。 Linux命令$ apt-get install openssh-server
【步骤二】下载putty(需要包含pscp.exe) 【原因】使用pscp命令传输文件到linux系统下 打开预装好OpenSSH的Linux系统虚拟机,在Windows下打开cmd(命令提示符)。 (由于目前只是简单下载了pscp,并没有在win下设置环境变量,所以并不是处处都能运行pscp的。一个比较方便的办法是,把pscp.exe文件拷贝到需要传输的文件所在的目录下,然后在cmd里进入到这个目录)输入如下命令: Windows命令> pscp hadoop-2.7.3.tar.gz master2@10.100.78.101:/home/master2 (传输当前目录下的hadoop-2.7.3.tar.gz文件,以master2用户登录,传输文件到地址为10.100.78.101的Linux环境下的 根目录/home/master2 文件夹中)需要安装的JDK同样通过pscp传输到Linux下
【步骤三】修改Linux下的Java环境变量 【原因】使得系统能够全局使用java工具,尤其是提供给Hadoop平台一个Java环境 使用putty工具传输进linux系统的JDK,解压后的目录是/home/master/jdk1.8.0_112/,当然用户也可以自定义其他目录。在Linux系统下,运用vi编辑器修改/etc/profile文件,在profile文件末尾添加如下export命令。 Linux命令$ vi /etc/profile export JAVA_HOME=/home/master/jdk1.8.0_112/ export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
重要的vi/vim编辑器指令:
| :wq 保存并退出 ZZ 保存并退出 :q! 强制退出并忽略所有更改 :e! 放弃所有修改,并打开原来文件。 u 撤销(Undo) U 撤销对整行的操作 Ctrl + r 重做(Redo),即撤销的撤销。 | i 在当前位置生前插入 I 在当前行首插入 a 在当前位置后插入 A 在当前行尾插入 o 在当前行之后插入一行 O 在当前行之前插入一行 | dd 删除当前行 dj 删除上一行 dk 删除下一行 x 删除当前字符 |
【步骤四】修改hadoop的配置文件,添加Java环境变量到Hadoop中 【原因】虽然我们已经在系统中设置好了环境变量,任意文件夹下都能输入java -version验证了。但是Hadoop并不如认同这一点(非常地囧),所以在hadoop文件夹里面也得配置一遍。 编辑 Hadoop解压目录/etc/hadoop/hadoop-env.sh 文件,在末尾加入如下字段: # set to the root of your Java installation export JAVA_HOME=/usr/java/latest
【步骤五】配置Hadoop伪随机分布式启动 【原因】本教程先基于简单的伪分布式模式进行示例。伪随机,即通过127.0.0.1的localhost,本机连接本机,来仿真分布式机群。换成真实情况的时候,只需要将ip地址改为真实分布式主机的目标ip地址即可。 这里需要修改两个文件,Hadoop解压目录/etc/hadoop/core-site.xml 与 同目录下的hdfs-site.xml 其中,在core-site.xml相应位置加入如下代码:
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> |
在hdfs-site.xml中相应位置加入如下代码:
| <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> |
【步骤六】尝试使用ssh自己登录本机,查看是否需要输入密码,需要的话进行免密登录配置 【原因】Hadoop后期配置可能有成千上百个集群, 每启动一次、关闭一次,执行啥命令,如果都要输入密码的话,就是输入成千上百次*N,简直是个噩梦。关于免密登录的原理,可查看文末附加配置教程四。 这里对单机版本的免密登录进行简单的介绍,首先输入ssh命令验证是否需要密码登录。 Linux命令$ ssh localhost 如果顺利登录到本机(自己登录自己)则不需要任何配置。输入 Linux命令$ exit 退出登录。 (有人会问,我到底是以哪个帐号登录本机的呢?一般不是需要在localhost前输入登录的用户名吗?其实答案很简单,自己登录自己的时候,当前账户就是你的登录账户。如果你在linux命令行使用的root账户,则登录localhost时就使用的root。在本教程中,推荐使用一般账户登录,例如master,yourname222之类的。 一些查看、更改文件夹所有者的Linux命令: 查看文件所有者:Linux命令$ ls -l -a (-l表示显示所有者,-a表示显示隐藏文件夹) 更改所有者:Linux命令$ chown jd-root test (将test目录的所有者更改为名叫jd-root的用户) 更改用户组:Linux命令$ chgrp -R jd-root test_dir 同时更改所有者和用户组:Linux命令$ chown -R jd-root:jd-root test_dir) 如果需要输入密码,则需要进行免密配置。不配置其实也可以,目前阶段的伪分布式机群,可能每次开启、关闭hadoop需要输入3次密码左右,仍能接受。接下来是配置过程: Linux命令$ mkdir ~/.ssh 解析:在当前用户文件夹下(~即代表当前用户master2,即 /home/master2/.ssh)创建一个隐藏文件夹.ssh用于存放ssh密钥信息。一般当前用户的密钥信息都存在这个隐藏文件夹里(注意,千万别用root用户来创建,会出现令人蛋碎无比的权限问题。本机用root用户没事儿,但是远程连接原则上不能使用该系统的root用户登录,因此root创建的.ssh文件夹无法被外部连接访问,会导致hadoop创建连接失败、denied、permission问题) Linux命令$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 解析:在.ssh文件夹下创建一对id_rsa命名的密钥文件。 Linux命令$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 解析:复制密钥文件的内容到一个新的名为authorized_keys文件的末尾。 Linux命令$ chmod 0600 ~/.ssh/authorized_keys 解析:赋予authorized_keys可以访问的权限 至此,再次输入 Linux命令$ ssh localhost 应该就可以直接连接“远程”本地主机,不需要输入密码了。
【步骤七】格式化namenode,启动hadoop 【解析】至此,所有Hadoop单机伪分布式模式的配置已经完毕,可以在命令行输入命令进行检验了。同样在hadoop的解压目录下: Linux命令$ bin/hdfs namenode -format 解析:对namenode进行格式化 Linux命令$ sbin/start-dfs.sh 解析:启动hadoop。启动后,可在本机浏览器输入网址 http://localhost:50070/ 查看hadoop运行情况。或者在宣称客户端输入相应hadoop主机的地址,端口号50070查看hadoop运行情况。 Hadoop下有许多操纵文件的命令,其方式跟Linux的shell命令很类似,详细见文末的配置教程三。这里列举一些简单的: Linux命令$ bin/hdfs dfs -mkdir /user 解析:在根目录建立user文件夹。 Linux命令$ bin/hdfs dfs -put etc/hadoop/*.xml input 解析:复制本机etc/hadoop目录下的所有xml文件到Hadoop系统的input文件夹。 Linux命令$ bin/hdfs dfs -get output output 解析:将hadoop系统中output文件夹的内容,复制到本机当前目录下的output目录里面。
所需附加配置教程的出处: 一、Linux下配置Java环境 二、Linux下vi编辑器的使用 三、Hadoop 0.18文档(命令手册) 四、SSH相关教程《SSH原理及应用》(何为权限、何为登录、密钥怎么配)、《SSH原理及应用二》其他教程 五、解压tar、gz文件相关命令
六、Linux下chmod命令详解 (1)各字段含义:sudo chmod -R(更改文件夹及其子文件夹) 7(所有者权限)6(组用户权限)4(其他用户权限)xxx(目标文件) (2)首先了解以下权限对应关系(执行权限字母表示 权限含义 执行权限数值表示): r 读取权 4; w 写入权 2; x 执行权 1; rwx(读、写、执行) rw-(读、写) (3)7、6、4的由来:若要rwx:4+2+1=7; 若要rw-:4+2=6; 若要r-x:4+1=5 (4)常用权限命令: sudo chmod 777 -R xxx (更改文件夹及其子文件夹权限为777) sudo chmod 600 ××× (只有所有者有读和写的权限) sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限) sudo chmod 700 ××× (只有所有者有读和写以及执行的权限) sudo chmod 666 ××× (每个人都有读和写的权限) sudo chmod 777 ××× (每个人都有读和写以及执行的权限)
七、解决root@localhost's password:localhost:permission denied,please try again问题 此问题是权限问题。通常用root用户登录、或者用sudo启动start-dfs命令以后,会默认以root为用户名登录对方主机。这一般是linux禁止的,linux通常情况下只允许本机用户以root登入,而不允许远程客户端以root用户来登录本主机的。因此会出现大量的permission denied问题。一般网络教程,都得确保以当前非root用户登录或创建.ssh文件夹来保存rsa密钥。此文提到了root用户创建.ssh后的问题。 若更改权限到普通用户,依然出现登录问题,可以考虑重置密码、格式化namenode、start-dfs.sh并刷新。(连接中所使用的start-all.sh脚本已经过时,新的hadoop版本不再使用) 八、Linux下更改用户组、所有者等操作。 九、Hadoop单机模式教程、Hadoop分布式多机教程 十、其他参考教程《在VMWare中建立Hadoop虚拟集群的详细步骤》、《Hadoop2.3.0详细安装过程》、《为学习Hadoop使用VMware准备3台一模一样的Linux虚拟机的详细搭建过程》
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。