主机
10.201.142.135 master
10.201.142.136 slave1
10.201.142.134 slave2
1在三台机器上分别常见账号 hadoop 之后我们所有的操作都用这个账号操作.生成目录
[hadoop@master ]$ pwd
/home/hadoop/
2 统一hosts文件 并修改每个主机的主机名
cat /etc/hosts
192.168.142.135 master master
192.168.142.136 slave1 slave1
192.168.142.134 slave2 slave2
3 安装jdk
网上下载jdk解压缩之后 放到/home/hadoop/下
然后在/etc/profile修改文件。在文章最后添加
export JAVA_HOME=/usr/java/jdk1.7.0_09
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
4 slva1 slav2 拷贝slave的密钥
4.1 生成master的密钥 在hadoop用户模式下执行ssh-keygen -t dsa 一直回车默认即可 (这一步在slave1 slave2也要执行)
scp /home/hadoop/.ssh/id_dsa.pub [email protected]:/home/hadoop/.ssh/authorized_keys
scp /home/hadoop/.ssh/id_dsa.pub [email protected]:/home/hadoop/.ssh/authorized_keys
这样以后master在两个slave之间拷贝就不用输入密码了
5 下载hadoop包http://hadoop.apache.org/
放到/home/hadoop解压缩
修改配置文件
5.1 vi hadoop-env.sh
修改JDK的路径 export JAVA_HOME=/home/hadoop/jdk1.7.0_03
6 修改四个主配置文件 core-site.xml hdfs-site.xml mapred-site.xml hadoop-env.sh6.1 [hadoop@master conf]$ cat core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.142.135:9000</value> #端口
</property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/var/</value> #路径
</configuration>
6.2 [hadoop@master conf]$ cat hdfs-site.xml
<name>dfs.replication</name>
<value>3</value>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop/dfs_name</value>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop/dfs_data</value>
6.3 [hadoop@master conf]$cat mapred-site.xml
<name>mapred.job.tracker</name>
<value>hdfs://192.168.142.135:9001</value>
<property>
<name>mapred.system.dir</name>
<value>/home/hadoop/hadoop/mapred_system</value>
</property>
<name>mapred.locl.dir</name>
<value>/home/hadoop/hadoop/mapred_local</value>
6.4 hadoop-env.sh 增加java路径和hadoop路径
# The java implementation to use. Required.
export JAVA_HOME=/usr/java/jdk1.7.0_09
# Extra Java CLASSPATH elements. Optional.
export HADOOP_CLASSPATH=/home/hadoop/hadoop
7 修改主从配置文件
vi master
master
vi slave
slave1
slave2
8 把这个hadoop整个文件分贝考到slav1 slav2
9 启动
hadoopbin/hadoop namenode -format
bin/start-all.sh
10 检测
在master端
[hadoop@master conf]$ /usr/java/jdk1.7.0_09/bin/jps
4350 Jps
4147 JobTracker
4063 SecondaryNameNode
3890 NameNode
在slave端
[hadoop@slave1 root]$ /usr/java/jdk1.7.0_09/bin/jps
1754 TaskTracker
1654 DataNode
1843 Jps
7. HDFS常用操作
hadoopdfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式
实例
运行bin/目录的hadoop命令,可以查看Haoop所有支持的操作及其用法,这里以几个简单的操作为例。
建立目录
[dbrg@dbrg-1:hadoop]$bin/hadoop dfs -mkdir testdir
在HDFS中建立一个名为testdir的目录
复制文件
[dbrg@dbrg-1:hadoop]$bin/hadoop dfs -put /home/dbrg/large.zip testfile.zip
把本地文件large.zip拷贝到HDFS的根目录/user/dbrg/下,文件名为testfile.zip
查看现有文件
[dbrg@dbrg-1:hadoop]$bin/hadoop dfs -ls
运行发行版提供的示例程序:
$ bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+'
2.补充
Q: bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'dfs[a-z.]+' 什么意思啊?
A: bin/hadoop jar(使用hadoop运行jar包) hadoop-0.20.2_examples.jar(jar包的名字) grep (要使用的类,后边的是参数)input output 'dfs[a-z.]+'
整个就是运行hadoop示例程序中的grep,对应的hdfs上的输入目录为input、输出目录为output。
Q: 什么是grep?
A: A map/reduce program that counts the matches of a regex in the input.
查看输出文件:
将输出文件从分布式文件系统拷贝到本地文件系统查看:
$ bin/hadoop fs -get output output
$ cat output/*
或者
在分布式文件系统上查看输出文件:
$ bin/hadoop fs -cat output/*
统计结果:
root@v-jiwan-ubuntu-0:~/hadoop/hadoop-0.20.2-bak/hadoop-0.20.2#bin/hadoop fs -cat output/part-00000
3 dfs.class
2 dfs.period
1 dfs.file
1 dfs.replication
1 dfs.servers
1 dfsadmin