开始玩hadoop4--装hadoop(ubuntu14.04,hadoop-2.6.0,最后还是屈服了java7)

好像hadoop 2.x 没有50030端口,2.x 好像没有jobTracker跟TaskTracker------摘自贴吧。


这个过程真的很折磨人啊………………………………


两台ubuntu server 和一台 ubuntu desktop

至于为什么要用一个桌面的ubuntu ,是因为我是新手,确实有时候命令不是很熟悉,

比如下载hadoop 这种工作,我还是十分喜欢在浏览器里点来点去。

其实我觉得功能没差。


补充:

译注:递归地创建目录

mkdir -p letter/important/xxx/xxxx/xxxx

设置访问权限

$ mkdir -m=r-- letter



先上手把。

这里要和所有人说声道歉!!!

这里要和所有人说声道歉!!!

这里要和所有人说声道歉!!!


重要的事要说三遍!!!


记得前面虚拟机安装ubuntu server的时候取名字,用了luis1 和 luis2 但是 ubuntu desktop 用户名叫 luis……

这个问题直接导致了后来我怎么都不能用ubuntu免密码ssh登陆(直接ssh 是可以免密码登陆的,就是hadoop控制的时候,怎么都不对)

困扰了我很久啊。(就是ssh可以免密码互相连接,但是hadoop就一定要重新输入密码,而且还每次都输不对)

后来在网上看到了ssh 专家解释:


ssh在登录其他主机时采用的“ ssh 目的主机用户名@目的主机的ip”的模式,

如这里“sshHadoop@192.168.0.2”,ip确定唯一主机,用户名确定主机上的有效用户,密码用于切换到该用户目录下。

在hadoop的集群中,slave文件中给的是datanode的主机ip,在启动hadoop的时候,

hadoop会依照该文件提供的ip地址逐个启动datanode节点上的tasktracker和datanode守护进程,

但是由于没有提供datanode主机的用户名,因而ssh默认以当前用户(假设为namenode)做为目标主机的用户(假设为datanode),

但ssh不会检测目标主机是否存在该用户(这显然不是它的工作),

在本机~/.ssh/known_hosts中没有存放有namenode@datanode‘s ip,因而需要输入密码,

但是由于目标主机没有namenode用户,因而无论怎么输入密码都是错的,或者提示权限不够。


没办法,只能在server 的那两台机子的终端,重新建立用户

sudo adduser luis

然后ubuntu就会弹出一系列可能需要改动的参数内容。

反正我是一个都没改,全部回车,最后y就可以了


切换用户  su - luis    

 注意这个‘-’ 两边都有空格的,不是连着luis的

这个是连用户根目录都换成了luis了,如果仅仅是su xxx ,那就是换个用户,但是当前路径不变。


然后这个就直接导致了另外一个问题,因为用户换了,所以rsa_pub 肯定也要跟着换,

因为口令是根据用户来生成的,不仅同机不同用户不同,就连普通用户和root用户的切换都要重新生成不同信任口令

所以没办法,只能重新生成。这次我的做法变得聪明一些(做多了总会学着偷点懒)

我把生成的口令拷贝到同一台电脑的authorized_keys文件里,然后直接把authorized_keys拷贝到另外两台机子上,

这样三台机子的信任口令大家都一样了,都相互拥有了。


这里要和所有人说声道歉!!!

这里要和所有人说声道歉!!!

这里要和所有人说声道歉!!!


重要的事要再说三遍!!!



这里我在补充一下linux 目录权限的问题:

777是什么意思?还有w+o是什么意思?有两种写法?

drwxr-xr-x 中的第一位(左数)表示当前目录是目录还是文件,d表示目录,-表示普通文件.
后面9位分为3组,每3组作为1组,从左到右分别表示文件属主,文件属组,和其他所有用户的权限.
r表示文件可读,w表示文件可写,x表示文件可以执行.
用命令chmod改变文件权限.有两种
第一种
chmod (ugoa) (=-+) (rwx) file
u代表文件属主,g代表文件属组,o代表系统中除属主和属组成员之外的其他用户,a代表所有用户(u,g,o)总和
+代表增加相应的权限,-代表减少相应的权限,=代表只有相应的权限
chmod g-w file就可以完成上面那个文件的权限改正.
第二种
用数字改正,r为4,w为2,x为1
把数字相加就是所对应的权限,不如rwx就是7,rw就是6
改正上面问题的权限方法为
chmod 775 file 就行了


这里文件夹的权限配置是:

用户目录755或700,不能使77*
.ssh目录755
authorized_key 644

全部弄好了后

需要切换到root用户下,修改/etc/ssh/sshd_config文件

RSAAuthentication yes  
PubkeyAuthentication yes  
AuthorizedKeysFile .ssh/authorized_keys  
将前面的#去掉

别忘了马上切换回来用户  exit 或者 su 就可以了


这期间,我也重新配置了一下java的环境变量,虽然,java环境变量在apt-get install 的时候就已经被操作系统配好了

但是我还是不放心,重新配置了一下,

sudo nano /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


这三条语句夹在done 和unset i  这个包扣的中间

还有要十分注意,我看不懂这个是什么语法,后来我一想,这个该不会是python版本吧

我真猜中了,Python有个很不成形的规定,它是靠缩进来限定语句块的,所以,这三条语句的位置一定要对齐

而且要在这个包扣里往里在移一点。这样才能看成一块(才会被程序理解成被大括号包起来的感觉)

三台我都重新配置了一下,本来JAVA_HOME 是oracle-java-8 现在就变成了上面的那个java7的版本。


说了那么多,总结起来就是,三台机器的用户一定要一样,至少控制hadoop的一定要一样(这里我都叫 luis )

一定要一样,否则就是血的教训。

这样就导致 scp 跨服务器拷贝的时候都是目的地址都是luis@h* :home/luis/

反正我是把配好的hadoop放到用户目录下的,结构就变成了home/luis/hadoop-2.6.0/*


各个机器的防火墙都需要关闭:选择永修生效把,局域网里要它没它一样。完全不用担心不安全的问题。

1) 永久性生效,重启后不会复原
开启:chkconfig iptables on
关闭:chkconfig iptables off


2) 即时生效,重启后复原
开启:service iptables start
关闭:service iptables stop




言归正传,现在开始

把昨天编译好的64位压缩包,解压到用户根目录:home/luis/hadoop-2.6.0/

修改hadoop-2.6.0/etc/hadoop/hadoop-env.sh,添加JDK支持:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

一定要写绝对路径。。。不能写${JAVA_HOME},因为编译用的是java7,所以这里我就一直用这个了。

这里我还碰到一个特别奇怪的问题,我把这个文件里的所有没有#号注释的地方的空行全部删了,

只有这样才能准确识别,否则就会报错,不知道其他人碰到没有。


修改hadoop-2.6.0/etc/hadoop/core-site.xml


注意:必须加在<configuration></configuration>节点内

#因为名字统一了,所以接下来配置的路径也都一样了
<configuration>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/luis/hadoop-2.6.0/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

还有个问题luis/hadoop-2.6.0 路径下是没有tmp文件夹的

所以一定要自己建一个 mkdir luis/hadoop-2.6.0/tmp

才不会导致出错


修改hadoop-2.6.0/etc/hadoop/hdfs-site.xml
这里除了要改路径之外还有 replication你有几个副本就有几份拷贝,我这里有两个datanode节点,所以写2就可以了

同样开始没有这两个文件夹,先建好data 和name文件夹再配置。mkdir XXXX
<property>
    <name>dfs.name.dir</name>
    <value>/home/luis/hadoop-2.6.0/dfs/name</value>
    <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
</property>
 
<property>
    <name>dfs.data.dir</name>
    <value>/home/luis/hadoop-2.6.0/dfs/data</value>
    <description>Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>


修改hadoop-2.6.0/etc/hadoop/mapred-site.xml

其实从2.*版本以后hadoop-2.6.0/etc/hadoop 目录里没有mapred-site.xml只有mapred-site.xml.template,用户需要复制一份模板,

cat mapred-site.xml.template >> mapred-site.xml 然后再作改动

这里的路径是namenode节点的路径。我这里namenode是ubuntu_desktop,所以是h5 ,写ip地址也没关系

<property>
    <name>mapred.job.tracker</name>
    <value>h5:9001</value>
    <description>Host or IP and port of JobTracker.</description>
</property>


修改hadoop-2.6.0/etc/hadoop/masters

尽量使用IP,其实从2.*版本以后hadoop-2.6.0/etc/hadoop没有masters文件

touch masters 一个,然后写入

列出所有的master节点:(尽量使用IP)

h5

修改hadoop-2.6.0/etc/hadoop/slaves


这个是所有datanode的机器(尽量使用IP)
h1

h2


最后:

将master结点上配置好的hadoop文件夹拷贝到所有的slave结点上

以slave1为例:命令如下:

scp -r  ~/hadoop-2.6.0 luis@h1:~/

scp -r  ~/hadoop-2.6.0 luis@h2:~/


这里我还修改了这个修改好的hadoop-2.6.0 文件夹的权限

三台我都改了,改成了777,因为我想啊ubuntu要读要写啊,所以就改了。其实想想不用改啊,用户自己就有权限的

(网上说这么改会出错,我不知道,那么大家先别改,如果没改有错误,再改)


这里就大功告成了

先格式化namenode节点,就是主节点

(这里一定要进入hadoop-2.6.0目录):

cd hadoop-2.6.0  //进入hadoop-2.6.0目录

bin/hdfs namenode -format  //格式化


然后开启进程,都是在namenode开启。另外两台不要动。

sbin/start-dfs.sh //开启进程



停止进程用

关闭hdfs集群的命令如下:

sbin/stop-dfs.sh


验证:

在namenode执行:jps  命令

在datanode执行:jps  命令

我们也可以通过网页来看是否正常安装与配置,地址如下:http://h5:50070/

或者在namenode 执行 :hadoop dfsadmin -report 命令

端口:描述
50030:mapred.job.tracker.http.address
JobTracker administrative web GUI JOBTRACKER的HTTP服务器和端口

50070:dfs.http.address
NameNode administrative web GUI NAMENODE的HTTP服务器和端口
50010 :dfs.datanode.address
DataNode control port (each DataNode listens on this port and registers it with the NameNode on startup) DATANODE控制端口,主要用于DATANODE初始化时向NAMENODE提出注册和应答请求


这里我没有配置HADOOP_HOME 是因为我想着多敲几遍结构路径代码就能熟悉一些结构。

你想配置的也可以,类似于java 的环境变量,就不用打路径就可以直接执行bash的作用

#Hadoop  这里貌似还配置了hive的环境变量
export HADOOP_HOME=/home/luis/hadoop-2.6.0  
export HIVE_HOME=/home/hadoop/hive-0.11.0  
export HADOOP_HOME_WARN_SUPPRESS=1  
export PATH=$PATH:$HADOOP_HOME/bin:$HIVE_HOME/bin 

因为我没配,所以我也不敢保证准确的放在哪里,你们大家可以试试放JAVA_HOME一起,看看会有什么问题没有。


实例运行(运行wordcount程序)(摘自来源:Linux社区  作者:lizhangyong1989博客)


创建 input目录

在Hadoop-2.6.0目录下创建input目录命令如下:
mkdir input


在input创建f1、f2并写内容
命令如下:
cat input/f1 Hello world bye luis
cat input/f2 Hello world bye luis


在hdfs创建/porrylee/input目录
命令如下:
bin/hadoop fs -mkdir /porrylee
bin/hadoop fs -mkdir /porrylee/input


将f1、f2文件copy到hdfs /porrylee/input目录
命令如下:
bin/hadoop fs -put input/ /porrylee


查看hdfs上是否有f1、f2文件
命令如下:
bin/hadoop fs -ls /porrylee/input/


执行wordcount程序
命令如下:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /porrylee/input/ /output/wordcount3


接下来就看看单词统计结果吧~~~~

查看执行结果

命令如下:
hadoop@master:~/hadoop-2.6.0$ bin/hdfs dfs -cat /output/wordcount3/*


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值