centos之hadoop的安装
Evernote Export
第一步 环境部署
参考
http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/
1.创建hadoop用户
$su #以root登录
$useradd -m hadoop -s /bin/bash # 创建新用户hadoop
$ passwd hadoop #密码设置为hadoop
$ visudo #修改hadoop 账号的权限,和root权限一样大 一般是在98行左右
2.安装ssh
默认是安装的
$ rpm -qa | grep ssh #一般情况下 默认是安装的 这个命令是为了检验是否安装
如果需要安装 命令如下
$ sudo yum install openssh-clients #
$ sudo yum install openssh-server
$ ssh localhost #测试可用
配置无密码链接ssh(此刻应该切换为hadoop账号)
$ exit # 退出刚才的 ssh localhost
$ cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
$ ssh-keygen -t rsa # 会有提示,都按回车就可以
$ cat id_rsa.pub >> authorized_keys # 加入授权
$ chmod 600 ./authorized_keys # 修改文件权限
$ ## 配置完这些 就可以无密码登录了
测试 ssh localhost
3.安装java环境
因为hadoop是java写的,需要jvm的支持 我们安装java1.7,
默认安装位置为 /usr/lib/jvm/java-1.7.0-openjdk
该路径可以通过执行 rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac' 命令确定,
$ sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel #安装java
$ vim ~/.bashrc # 修改环境变量
$ export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk #在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存:
$ source ~/.bashrc # 使变量设置生效
检验是否设置正确
$ echo $JAVA_HOME # 检验变量值
$ java -version
$ JAVA_HOME/bin/java -version # 与直接执行 java -version 一样
4.安装hadoop2
Hadoop 2 可以通过hadoop下载网站 这个教程是2.6版本,强烈建议跟着教程走,选择3的话,可能会有一些新的特性产生一些兼容问题
不会用ftp的话 可以在命令行输入wget http://mir
ror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
解压安装
$ sudo tar -zxf ~/hadoop-2.7.7.tar.gz -C /usr/local # 解压到/usr/local中
$
$ sudo mv ./hadoop-2.7.7/ ./hadoop # 将文件夹名改为hadoop
$ sudo chown -R hadoop:hadoop ./hadoop # 修改文件
测试是否成功安装
成功则会显示 Hadoop 版本信息:
$ cd /usr/local/hadoop
$ ./bin/hadoop version
hadoop 的三种模式
模式 | 简介 |
---|---|
单机模式 | 自己的机器玩 |
伪分布式模式 | 自己的机器模拟多态机器 |
分布式 | 多台机器一起玩 |
单机模式的安装
默认就是单机模式,无需修改其他配置,hadoop有些例子可以尝试下
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 路径在这 包括wordcount、terasort、join、grep 等。
$ cd /usr/local/hadoop
$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
$ cat ./output/* # 查看运行结果
运行出错
伪分布式的配置
在设置 Hadoop 伪分布式配置前,我们还需要设置 HADOOP 环境变量,执行如下命令在 ~/.bashrc 中设置:
vim ~/.bashrc
在后面追加
# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
生效
source ~/.bashrc
修改core-site.xml
文件路径 /usr/local/hadoop/etc/hadoop/
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<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>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
NameNode格式化
./bin/hdfs namenode -format
开启NameNode 和DataNode 守护进程
./sbin/start-dfs.sh
jps 查看进程
web在线http://localhost:50070
我用的是阿里云,如果要访问阿里云,需要配置安全组端口
5.运行hadoop
伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
$ ./bin/hdfs dfs -mkdir -p /user/hadoop
$ ./bin/hdfs dfs -mkdir input
$ ./bin/hdfs dfs -put ./etc/hadoop/*.xml input
$ ./bin/hdfs dfs -ls input
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
$ ![06efdd821d925618086667b857b8c7e3.png](en-resource://database/767:0)
代表运行成功
Hadoop 运行程序时,输出目录不能存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次执行,需要执行如下命令删除 output 文件夹:
$ rm -r ./output # 先删除本地的 output 文件夹(如果存在)
$ ./bin/hdfs dfs -get output ./output # 将 HDFS 上的 output 文件夹拷贝到本机
$ cat ./output/*
$ ./sbin/stop-dfs.sh
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行 ./sbin/start-dfs.sh 就可以!