不迷路,欢迎关注笔者微信公众号:
安装部分参考https://blog.youkuaiyun.com/qjk19940101/article/details/70544197,这里只是改动了部分和部分填充并进一步说明:
首先更新apt包:
sudo apt-get update
安装SSH server:
sudo apt-get install openssh-server
配置SSH:
ssh localhost
exit
输入密码登录本机和退出本机
如果需要无密码登录:
在进行了初次登陆后,会在当前家目录用户下有一个.ssh文件夹,进入该文件夹下:
cd ~/.ssh/
使用rsa算法生成秘钥和公钥对,:
ssh-keygen -t rsa
运行后一路回车就可以了,其中第一个是要输入秘钥和公钥对的保存位置,默认是在:
.ssh/id_rsa
生成完后就可以看到这一对的位置:
Your identification has been saved in /home/ykt/.ssh/id_rsa.
Your public key has been saved in /home/ykt/.ssh/id_rsa.pub.
然后把公钥加入到授权中:
cat ./id_rsa.pub >> ./authorized_keys
再次ssh localhost的时候就可以无密码登陆了。
安装JDK:
首先检查是否已经安装
java -version
如果没有进行安装:看清位数
这里选择的是:jdk-8u181-linux-x64.tar.gz
为了方便,为其单独创立一个文件夹:然后将其放到该目录下
sudo mkdir -p /usr/local/java
sudo mv /tmp/mozilla_ykt0/jdk-8u181-linux-x64.tar.gz /usr/local/java/
下载后的具体位置以自己的为准,这里是/tmp/mozilla_ykt0/
进入该目录进行解压:
cd /usr/local/java
sudo tar xvzf jdk-8u131-Linux-x64.tar.gz
解压成功后会在当前目录下看到:
jdk1.8.0_181文件夹
然后删除安装包:
sudo rm jdk-8u181-linux-x64.tar.gz
配置JDK:
设置环境变量:打开环境变量的配置文件
sudo vim /etc/profile
在末尾添加:
JAVA_HOME=/usr/local/java/jdk1.8.0_181
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
注意:jdk1.8.0_181和下载的版本号对应
告诉Ubuntu Java JDK的位置:
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_181/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_181/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_181/bin/javaws" 1
相应的将其设为默认方式:
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_181/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_181/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_181/bin/javaws
重新加载环境变量的配置文件:
source /etc/profile
检测:
java -version
出现一下即成功:
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
安装Hadoop:
要是去官网的话可以参考:
可以去镜像:Index of /apache/hadoop/common
选择稳定版本;stable/,里面有两个文件,src是源码,需要编译,选择另一个下载即可,这是编译好的
这里选择的版本号是:hadoop-2.9.1
然后将其解压到:/usr/local
sudo tar -zxf ~/Downloads/hadoop-2.9.1.tar.gz -C /usr/local
记得删除安装包:
rm ~/Downloads/hadoop-2.9.1.tar.gz
重命名并修改权限:
cd /usr/local/
sudo mv ./hadoop-2.9.1/ ./hadoop
sudo chown -R ykt ./hadoop
授权前:
ls -al
drwxr-xr-x 9 root root 4096 4月 16 19:52 hadoop
授权后:
drwxr-xr-x 9 ykt root 4096 4月 16 19:52 hadoop
检测:
./usr/local/hadoop/bin/hadoop version
出现以下安装成功:
Hadoop 2.9.1
Subversion https://github.com/apache/hadoop.git -r e30710aea4e6e55e69372929106cf119af06fd0e
Compiled by root on 2018-04-16T09:33Z
Compiled with protoc 2.5.0
From source with checksum 7d6d2b655115c6cc336d662cc2b919bd
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.9.1.jar
配置Hadoop:
(1)单机配置:
无需做任何东西,上面安装成功即是默认的单机模式:
测试:
cd /usr/local/hadoop
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar
可以看到Hadoop自身内置的很多例子:
An example program must be given as the first argument.
Valid program names are:
aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.
dbcount: An example job that count the pageview counts from a database.
distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.
grep: A map/reduce program that counts the matches of a regex in the input.
join: A job that effects a join over sorted, equally partitioned datasets
multifilewc: A job that counts words from several files.
pentomino: A map/reduce tile laying program to find solutions to pentomino problems.
pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.
randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.
randomwriter: A map/reduce program that writes 10GB of random data per node.
secondarysort: An example defining a secondary sort to the reduce.
sort: A map/reduce program that sorts the data written by the random writer.
sudoku: A sudoku solver.
teragen: Generate data for the terasort
terasort: Run the terasort
teravalidate: Checking results of terasort
wordcount: A map/reduce program that counts the words in the input files.
wordmean: A map/reduce program that counts the average length of the words in the input files.
wordmedian: A map/reduce program that counts the median length of the words in the input files.
wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.
这里直接采用https://blog.youkuaiyun.com/qjk19940101/article/details/70544197的例子
cd /usr/local/hadoop
cp ./etc/hadoop/*.xml ./input
cd input
ls
可以看到将以下xml作为输入:
capacity-scheduler.xml core-site.xml hadoop-policy.xml hdfs-site.xml httpfs-site.xml kms-acls.xml kms-site.xml yarn-site.xml
运行:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep ./input/ ./out 'dfs[a-z.]+'
查看输出:
cat ./out/*
1 dfsadmin
可以看到在这些xml文件中符合dfs[a-z.]+正则表达式的单词只有一个即dfsadmin
注意:Hadoop默认不会覆盖结果文件,想要再次运行上面实例会提示出错,需要先将./out删除
rm -r ./out
试验完后可以将输入也删掉了
sudo rm -rf input
(2)伪分布式配置:
伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml,路径在:
/usr/local/hadoop/etc/hadoop,原博主这里貌似说错了。
打开core-site.xml
vim core-site.xml
在:
<configuration>
</configuration>
中添加如下配置
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/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://localhost:9000即hdfs文件系统,例如还有淘宝的tfs://,谷歌的gfs://以及本地的file://
打开hdfs-site.xml
vim hdfs-site.xml
在
<configuration>
</configuration>
添加:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
这里的dfs.replication就是指备份的份数
配置说明:(这里粘贴一下原博主的话吧)
Hadoop的运行方式是由配置文件决定的(运行Hadoop时会读取配置文件),因此如果需要从伪分布模式切换到非分布式模式,需要删除core-site.xml中的配置项。
此外,伪分布式虽然只需要配置fs.defaultFS和dfs.replication就可以运行(官方教程如此),不过若没有配置hadoop.tmp.dir参数,则默认使用的临时目录为/tmp/hadoop-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行format才行。所以进行了设置,同时也指定dfs.namenode.name.dir和dfs.datanode.data.dir,否则在接下来的步骤中可能会处错
切换回hadoop主目录:/usr/local/hadoop
NameNode的格式化
./bin/hdfs namenode -format
出现如下即成功:
00000000 using no compression
18/08/20 11:07:16 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 320 bytes saved in 0 seconds .
18/08/20 11:07:16 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/08/20 11:07:16 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at ykt-virtual-machine/127.0.1.1
************************************************************/
开启NameNode和DataNode守护进程
./sbin/start-dfs.sh
注意:如果报错没有没有JAVA——HOME
则手动添加即可:(当前目录是usr/local/hadoop)
cd etc/hadoop/
vim hadoop-env.sh
# Set Hadoop-specific environment variables here.
# The only required environment variable is JAVA_HOME. All others are
# optional. When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
# The java implementation to use.
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
即可
验证:
jps
3648 DataNode
3941 Jps
2678 NameNode
3095 SecondaryNameNode
同时出现以上四个即成功
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注意:
1)如果没有出现:SecondaryNameNode,重启,即运行sbin/stop-dfs.sh关闭进行,然后再次尝试启动尝试)
2)如果没有DataNode,这个情况的发生是由于虚拟机和linux共同作用的结果,虚拟机本身不稳电工。会虚拟机假死的情况,如果说页面已经出现了Datanode的话,那么重启一下,假死现象消失,jps后出现DataNode.
3)如果datanode确实没有启动,可以试着将/usr/local/hadoop/tmp/dfs下的data目录删除,然后重新启动dfs
rm -rf data
./sbin/start-dfs.sh
jps
笔者就是属于后者这种情况,因为在配置core-site.xml和hdfs-site.xml两个文件时,手动出错,所以多次修改,然后多次使用
./bin/hdfs namenode -format进行NameNode的格式化,但是这样的话每次都会为NameNode生成新的namespaceID,,但是在hadoop.tmp.dir目录下的DataNode还是保留上次的namespaceID,因为namespaceID的不一致,而导致DataNode无法启动,所以手动删除(删除/usr/local/hadoop/tmp/dfs目录下的data),重新生成datanode
所以格式化成功后,后续再也不要进行格式化了!!!!!!!!!!!!!!!
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
运行:
上面的单击模式,grep例子读取的是本地数据,伪分布式读取则是HDFS上的数据。
伪分布式和单机的mapreduce基本上都是一样的,最主要的区别就是该模式下要使用HDFS的文件系统。
所以首先需要在HDFS中创建用户目录:
./bin/hdfs dfs -mkdir -p /user/hadoop
然后创建输入文件夹:
./bin/hdfs dfs -mkdir /user/hadoop/input
类似单机模式,将etc/hadoop下所有的xml文件复制到输入
./bin/hdfs dfs -put ./etc/hadoop/*.xml /user/hadoop/input
然后查看:
./bin/hdfs dfs -ls /user/hadoop/input
可以看到:
-rw-r--r-- 1 ykt supergroup 7861 2018-08-20 13:15 /user/hadoop/input/capacity-scheduler.xml
-rw-r--r-- 1 ykt supergroup 1028 2018-08-20 13:15 /user/hadoop/input/core-site.xml
-rw-r--r-- 1 ykt supergroup 10206 2018-08-20 13:15 /user/hadoop/input/hadoop-policy.xml
-rw-r--r-- 1 ykt supergroup 1069 2018-08-20 13:15 /user/hadoop/input/hdfs-site.xml
-rw-r--r-- 1 ykt supergroup 620 2018-08-20 13:15 /user/hadoop/input/httpfs-site.xml
-rw-r--r-- 1 ykt supergroup 3518 2018-08-20 13:15 /user/hadoop/input/kms-acls.xml
-rw-r--r-- 1 ykt supergroup 5939 2018-08-20 13:15 /user/hadoop/input/kms-site.xml
-rw-r--r-- 1 ykt supergroup 690 2018-08-20 13:15 /user/hadoop/input/yarn-site.xml
运行grep(该流程的mapreduce就和单机一样了,不一样的就是从hdfs文件系统取输入)
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar grep /user/hadoop/input output 'dfs[a-z]+'
查看结果:
./bin/hdfs dfs -cat output/*
1 dfsadmin
可以看到和单机模式一样的结果
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
可以使用如下多种方式参看当前hdfs文件系统中的文件:
./bin/hadoop dfs -du -h
./bin/hadoop dfs -ls -h
./bin/hadoop fs -ls output
Found 2 items
-rw-r--r-- 1 ykt supergroup 0 2018-08-20 13:27 output/_SUCCESS
-rw-r--r-- 1 ykt supergroup 11 2018-08-20 13:27 output/part-r-00000
./bin/hadoop fs -cat output/part-r-00000
1 dfsadmin
利用HDFS Web界面,不过只能查看文件系统数据
在utilities下的Browse the file system,可以查看当前的系统文件
当然还可以在datanodes下相关信息
用命令窗口查看hdfs系统时可以看到,这里既有hadoop 又有hdfs,这两者其实可以这么看,hdfs是hadoop的子集,hadoop不仅可以参看hdfs文件系统还可以查看例如淘宝的tfs://,谷歌的gfs://以及本地的file://等等。
所以一般还是用hadoop把,这个还是比较强大的。
用的格式一般为:
hadoop fs 命令 URL
这里的URL就是具体指要查看哪一个文件系统,如本地的的 file:///root 以及hdfs文件系统的 hdfs://localhost:9000/
这里的命令大部分和linux命令是相同或者类似的,下面列一些常见的(和linux常见一样的就不做介绍了):
-ls 可选参数有 -h (以单位的形式具体给出文件大小) -R(递归显示)
-cat
-charp
-chmod
-chown
-cp
-mv
-tail 可选参数 -f (实时追踪)
-df 统计系统可用空间
-du 显示目录中所有文件大小
-mkdir 可选参数 -p (产生各级父目录)
-rm
-rmr 递归删除
-put 上传文件到Hdfs
所以这条命令一般后有URL1(上传的本地文件) URL2(目的位置) 可选参数 -p (保留文件属性) -f(如果已有 同名则覆盖)
-get 下载文件到本地,可选参数啥的和-put类似,只不过URL位置变一下
-appendToFile 追加文件 后面也有两个URL1 URL2 就是将URL1文件追加到URL2文件中
-getmerge 合并多个文件为一个文件
-setrep -w 5 URL 就是将URL文件副本改为5,还有一个可选参数就是-R就是递归修改文件
- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关闭Hadoop:
./sbin/stop-dfs.sh
下次开启Hadoop:
./sbin/start-dfs.sh
从以上可以看出:每次操作hadoop时都得切换到目录/usr/local/hadoop/bin 或是/usr/local/hadoop/sbin下,所以还是给hadoop配置一下环境变量比较方便:
vim /etc/bash.bashrc
在末尾添加:
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
然后执行source命令:
source /etc/bash.bashrc
最后在任意位置试一下hadoop
hadoop version
Hadoop 2.9.1
Subversion https://github.com/apache/hadoop.git -r e30710aea4e6e55e69372929106cf119af06fd0e
Compiled by root on 2018-04-16T09:33Z
Compiled with protoc 2.5.0
From source with checksum 7d6d2b655115c6cc336d662cc2b919bd
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.9.1.jar
python有关于hadoop的框架,可以查看python 关于Hadoop的框架_爱吃火锅的博客-优快云博客
关于Hadoop更多介绍:Hadoop - 随笔分类 - LanceToBigData - 博客园