1.下载jdk并安装
去官网下就可以了,下完之后把文件移到/opt/Java下
- guo@guo:~/下载$ mv ./hadoop-2.7.2-src.tar.gz /opt/Hadoop/
- mv: 无法创建普通文件"/opt/Hadoop/hadoop-2.7.2.tar.gz": 权限不够
- guo@guo:~/下载$ su root #你用sudo也可以,我是直接换到root用户了,写顺手了
- 密码:
- root@guo:/home/guo/下载# mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/
- root@guo:/home/guo/下载# mv ./jdk-8u73-linux-x64.tar.gz /opt/Java/
解压
- root@guo:/opt# cd Java/
- root@guo:/opt/Java# ll
- 总用量 177072
- drwxr-xr-x 2 root root 4096 3月 14 15:54 ./
- drwxr-xr-x 4 root root 4096 3月 14 15:51 ../
- -rw-rw-r-- 1 guo guo 181310701 3月 14 15:47 jdk-8u73-linux-x64.tar.gz
- root@guo:/opt/Java# tar -zxvf jdk-8u73-linux-x64.tar.gz
修改文件所有者(用户:用户组)
- root@guo:/home/guo# chown -R guo:guo /opt/Java/jdk1.8.0_73/
- root@guo:/home/guo# cd /opt/Java/
- root@guo:/opt/Java# ll
- 总用量 177076
- drwxr-xr-x 3 root root 4096 3月 14 15:59 ./
- drwxr-xr-x 4 root root 4096 3月 14 15:51 ../
- drwxr-xr-x 8 guo guo 4096 1月 30 09:53 jdk1.8.0_73/
- -rw-rw-r-- 1 guo guo 181310701 3月 14 15:47 jdk-8u73-linux-x64.tar.gz
设置java环境变量
在文件最后加上
- #java
- export JAVA_HOME=/opt/Java/jdk1.8.0_73
- export JRE_HOME=/opt/Java/jdk1.8.0_73/jre
- export CLASSPATH=$JAVA_HOME/lib
- export PATH=:$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
之后更新配置文件
然后查看java是否配置成功
- guo@guo:~$ java -version
- java version "1.8.0_73"
- Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
- Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
恭喜你第一步已经完成了!
2.配置SSH无密码登录
注:ssh 用户名@主机名 ,如果直接ssh 主机名,它会以你那台机器的当前用户登录,所以另一台机器要有同样的用户。
多台实体机进行通信(发送或者读取数据,namenode和datanode之间)就是借助ssh,在通信过程中如果需要操作人员频繁输入密码是不切实际的,所以需要ssh的无密码登录。
安装openssh-server
- guo@guo:~$ su root
- 密码:
- root@guo:/home/guo# apt-get install openssh-server
创建ssh-key(用rsa这种加密算法)
- root@guo:/home/guo# ssh-keygen -t rsa
多次回车即可,然后进入~/.ssh目录(“.”表示这是一个隐藏文件)
- root@guo:/home/guo# cd ~/.ssh
- root@guo:~/.ssh# ll
- 总用量 16
- drwx------ 2 root root 4096 3月 14 16:20 ./
- drwx------ 4 root root 4096 3月 14 16:20 ../
- -rw------- 1 root root 1679 3月 14 16:20 id_rsa
- -rw-r--r-- 1 root root 390 3月 14 16:20 id_rsa.pub
复制一份,改名为公钥
- root@guo:~/.ssh# cp id_rsa.pub authorized_keys
- root@guo:~/.ssh# ll
- 总用量 20
- drwx------ 2 root root 4096 3月 14 16:22 ./
- drwx------ 4 root root 4096 3月 14 16:20 ../
- -rw-r--r-- 1 root root 390 3月 14 16:22 authorized_keys
- -rw------- 1 root root 1679 3月 14 16:20 id_rsa
- -rw-r--r-- 1 root root 390 3月 14 16:20 id_rsa.pub
修改公钥权限(一定要改)
- guo@guo:~/.ssh$ chmod 600 authorized_keys #4+2 0 0
- guo@guo:~/.ssh$ ll
- 总用量 56
- drwx------ 2 guo guo 4096 3月 15 18:41 ./
- drwx------ 20 guo guo 4096 3月 15 17:56 ../
- -rw------- 1 guo guo 389 3月 15 18:41 authorized_keys
- -rw------- 1 guo guo 1679 3月 15 18:41 id_rsa
- -rw-r--r-- 1 guo guo 389 3月 15 18:41 id_rsa.pub
- -rw-r--r-- 1 guo guo 444 3月 15 18:37 known_hosts
然后测试是否成功
- guo@guo:~/.ssh$ ssh guo
- Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)
-
- * Documentation: https://help.ubuntu.com/
-
- 0 packages can be updated.
- 0 updates are security updates.
-
- Last login: Tue Mar 15 18:39:56 2016 from 127.0.0.1
- guo@guo:~$ exit
- 注销
- Connection to guo closed.
- guo@guo:~/.ssh$
3.Hadoop单机模式配置
去官网下最新的Hadoop(http://apache.opencas.org/hadoop/common/stable/),目前最新的是2.7.2,下载完之后把它放到/opt/Hadoop下
- guo@guo:~/下载$ mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/
- mv: 无法创建普通文件"/opt/Hadoop/hadoop-2.7.2.tar.gz": 权限不够
- guo@guo:~/下载$ su root
- 密码:
- root@guo:/home/guo/下载# mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/
解压
- guo@guo:/opt/Hadoop$ sudo tar -zxf hadoop-2.7.2.tar.gz
- [sudo] guo 的密码:
解压jdk的时候我用的是tar -zxvf,其中的v呢就是看一下解压的过程,不想看你可以不写。
修改文件所有者(用户:用户组)
- root@guo:/opt/Hadoop# chown -R guo:guo /opt/Hadoop/hadoop-2.7.2
- root@guo:/opt/Hadoop# ll
- 总用量 224960
- drwxr-xr-x 4 root root 4096 3月 14 18:14 ./
- drwxr-xr-x 4 root root 4096 3月 14 15:51 ../
- drwxr-xr-x 11 guo guo 4096 3月 14 21:16 hadoop-2.7.2/
设置环境变量
- guo@guo:/opt/Hadoop$ sudo gedit /etc/profile
在最后加上(这样设置在执行bin/sbin目录下的命令时就不用进入该目录用了)
- #hadoop
- export HADOOP_HOME=/opt/Hadoop/hadoop-2.7.2
- export PATH=$PATH:$HADOOP_HOME/sbin
- export PATH=$PATH:$HADOOP_HOME/bin
然后更新配置
- guo@guo:/opt/Hadoop$ source /etc/profile
如果root用户更新配置后,hadoop用户无法使用,则切换至hadoop用户的~/.bash_profile 文件进行修改
修改/opt/Hadoop/hadoop-2.7.2/etc/hadoop下的hadoop-env.sh
- guo@guo:/opt/Hadoop$ cd hadoop-2.7.2
- guo@guo:/opt/Hadoop/hadoop-2.7.2$ cd etc/hadoop/
- guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ sudo gedit ./hadoop-env.sh
进入文件后
- export JAVA_HOME=${JAVA_HOME}#将这个改成JDK路径,如下
- export JAVA_HOME=/opt/Java/jdk1.8.0_73
然后更新文件配置
- guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ source ./hadoop-env.sh
恭喜你单机模式已经配置好了!这时你就可以运行一下wordcount试试了。
4.Hadoop伪分布模式配置
修改core-site.xml
- guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ sudo gedit ./core-site.xml
- [sudo] guo 的密码:
进入文件后加入以下内容
-
-
- fs.default.name
- hdfs://localhost:9000
-
-
- hadoop.tmp.dir
- /opt/Hadoop/hadoop-2.7.2/tmp
-
-
-
修改hdfs-site.xml
拷贝mapred-site.xml.template一份,修改为mapred-site.xml
- sudo cp mapred-site.xml.template mapred-site.xml
并在里面加入
-
-
- mapreduce.framework.name
- yarn
-
-
修改yarn-site.xml
-
-
- yarn.nodemanager.aux-services
- mapreduce_shuffle
-
-
格式化hdfs
- guo@guo:/opt/Hadoop/hadoop-2.7.2# hdfs namenode -format
启动hdfs
- guo@guo:/opt/Hadoop/hadoop-2.7.2# start-dfs.sh
启动yarn
- guo@guo:/opt/Hadoop/hadoop-2.7.2# start-yarn.sh
查看是否成功启动
- guo@guo:/opt/Hadoop/hadoop-2.7.2# jps
- 10144 NodeManager
- 9668 SecondaryNameNode
- 9833 ResourceManager
- 9469 DataNode
- 10285 Jps
- 9311 NameNode
如果出现NodeManager DataNode Jps SecondaryNameNode ResourceManage NameNode则表示启动成功(缺一不可)
如果出现下面的情况
- guo@guo:/opt/Hadoop/hadoop-2.7.2$ jps
- 程序 'jps' 已包含在下列软件包中:
- * openjdk-7-jdk (您必须启用main 组件)
- * openjdk-6-jdk (您必须启用universe 组件)
- * openjdk-8-jdk (您必须启用universe 组件)
- 请尝试:sudo apt-get install <选定的软件包>
则执行
- root@guo:/etc# update-alternatives --install /usr/bin/jps jps /opt/Java/jdk1.8.0_73/bin/jps 1
- update-alternatives: 使用 /opt/Java/jdk1.8.0_73/bin/jps 来在自动模式中提供 /usr/bin/jps (jps)
查看resourcemanager:http://localhost:8088
查看namenode:http://localhost:50070
恭喜你伪分布模式已经配置好了!
5.hadoop jobhistory配置
hadoop jobhistory记录下已运行完的MapReduce作业信息并存放在指定的HDFS目录下,默认情况下是没有启动的,需要配置完后手工启动服务。
mapred-site.xml添加如下配置
mapreduce.jobhistory.address
hadoop000:10020
MapReduce JobHistory Server IPC host:port
mapreduce.jobhistory.webapp.address
hadoop000:19888
MapReduce JobHistory Server Web UI host:port
mapreduce.jobhistory.done-dir
/history/done
mapreduce.jobhistory.intermediate-done-dir
/history/done_intermediate
启动history-server:
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
停止history-server:
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh stop historyserver
history-server启动之后,可以通过浏览器访问WEBUI: hadoop000:19888
在hdfs上会生成两个目录
hadoop fs -ls /history
drwxrwx--- - spark supergroup 0 2014-10-11 15:11 /history/done
drwxrwxrwt - spark supergroup 0 2014-10-11 15:16 /history/done_intermediate
mapreduce.jobhistory.done-dir(/history/done): Directory where history files are managed by the MR JobHistory Server(已完成作业信息)
mapreduce.jobhistory.intermediate-done-dir(/history/done_intermediate): Directory where history files are written by MapReduce jobs.(正在运行作业信息)
测试:
通过hive查询city表观察hdfs文件目录和hadoop000:19888
hive> select id, name from city;
观察hdfs文件目录:
1)历史作业记录是按照年/月/日的形式分别存放在相应的目录(/history/done/2014/10/11/000000);
2)每个作业有2个不同的后缀名的记录:jhist和xml
hadoop fs -ls /history/done/2014/10/11/000000
-rwxrwx--- 1 spark supergroup 22572 2014-10-11 15:23 /history/done/2014/10/11/000000/job_1413011730351_0002-1413012208648-spark-select+id%2C+name+from+city%28Stage%2D1%29-1413012224777-1-0-SUCCEEDED-root.spark-1413012216261.jhist
-rwxrwx--- 1 spark supergroup 160149 2014-10-11 15:23 /history/done/2014/10/11/000000/job_1413011730351_0002_conf.xml
观察WEBUI: hadoop000:19888
6.修改防火墙
在虚拟机visualBox里安装了centos7系统,并且在该系统里运行了一个web服务,想通过宿主机或者外网来访问该服务,总是无法访问(虚拟机网卡已配置成桥接)
一般情况下iptables已经包含在Linux发行版中.
运行
#
iptables --version
来查看系统是否安装iptables
启动iptables:
#
service iptables start
查看iptables规则集
#
iptables --list
下面是没有定义规划时iptables的样子:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
查看防火墙状态:
#
/etc/init.d/iptables status
如果得到一系列的信息,说明防火墙处于开启状态。
MySQL默认端口3306,Linux防火墙默认是阻止的。
查看3306端口是否开放:
#
lsof -i:3306
如果有显示说明已经开放了.如果没有显示说明没有开放 【Linux公社 http://www.linuxidc.com 】
要访问3306可以用两种方式,一个是关闭防火墙,另一个就是让防火墙开放3306端口。
一、开放3306端口:
方法一:
#
iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
#
iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT
对应阻止3306端口的命令为:
#
iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP
#
iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP
然后保存
#
/etc/rc.d/init.d/iptables save
方法二:(永久修改)
1、修改/etc/sysconfig/iptables文件,增加如下一行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
然后重启防火墙:
#
service iptables restart
二、关闭防火墙:
两种方式:
1)重启后生效:
#
chkconfig iptables off ( 对应的开启防火墙命令为: #
chkconfig iptables on )
2)即时生效,但重启后防火墙会再次启动:
#
service iptables stop ( 对应的开启防火墙命令为: #
service iptables start )
7.安全模式
开启:# hdfs dfsadmin -safemode
关闭:# hadoop dfsadmin -safemode leave