hadoop实验

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 02:28   55   0

1 wordcount

启动hadoop

9202951-8f7bf424eab7b7c0.png
image.png

9202951-d5a2c76ef25c134f.png
image.png

进入hadoop安装目录

cd /usr/local/hadoop
输入命令 hadoop fs -mkdir /input
用命令看:$hadoop fs -ls /
创建input目录是否成功
我们将LICENSE.txt放到input目录下
hadoop fs -put LICENSE.txt /input
可以通过命令hadoop fs -ls /input看到license.txt已经存在input目录下了


9202951-3fc1b94b28d62642.png
image.png

接下来只需要将/input通过hadoop自带示例程序wordcount计算出其中各字母出现的次数便可

 hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.2.jar wordcount/input/output
9202951-3058a1942dd17b18.png
image.png

通过命令hadoop fs -ls /看出,HDFS系统下多了个/output 和/tmp目录。打开/output目录可以看到下面有两个文件

9202951-3525cfe7be6a1257.png
image.png

9202951-be633cfeb8d42db3.png
image.png

wordcount实验参考

mapreduce实验编程

下载hadoop-streaming最新版本
hadoop-streaming下载地址
hadooop-streaming是一个框架,可以让任何语言编写的mr程序都能在hadoop上运行,只需要遵循标准输入stdin输出stdout即可。
先写一个map.py

#!/usr/bin/env python

import sys
for line in sys.stdin:
 line=line.strip()
 words=line.split()
 for word in words:
  print '%s\t%s' %(word,1)

随便写一个测试文件 word.txt

张三 李四
黄二 小牛
张三 小牛
李四 黄一

然后使用以下命令,体会一下map过程


9202951-7d05fec94d97d8f9.png
image.png

接着我们写一个简单的red.py体验一下reduce过程

#!/usr/bin/env python

import sys

current_word=None
current_count=0
word=None

for line in sys.stdin:
  line=line.strip()
  word,count=line.split('\t',1)
  try:
    count=int(count)
  except:
    continue

  if current_word == word:
    current_count+=count
  else:
    if current_word:
      print '%s\t%s' %(current_word,current_count)
    current_word=word
    current_count=count

if current_word==word:
  print '%s\t%s' %(current_word,current_count)

执行

cat word.txt | python map.py | sort -k 1 | python red.py
9202951-fc3d59d0e059d3ae.png
image.png

一个简单的wordcount就这么写好啦~

那么怎么才能提交python编写的mr程序给hadoop

hbase

hbase
hbase稳定版
tar -zxvf hbase-1.4.8.tar.gz
mv hbase-1.4.8 /usr/local/hadoop/hbase

配置hbase

gedit ~/.bashrc
添加


9202951-b9271b78fff537e8.png
image.png

使配置生效
source ~/.bashrc

一.修改hbase-env.sh

cd /usr/local/hadoop/hbase/conf
gedit hbase-env.sh
9202951-1db92391624925b5.png
image.png
9202951-75e039a07dd5bdcf.png
image.png

修改 hbase-site.xml

<configuration>
      <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:9000/hbase</value>
      </property>
      <property>
        <name>hbase.tmp.dir</name>
        <value>/usr/local/hadoop/hbase/tmp</value>
      </property>
      <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/usr/local/hadoop/hbase/zookeeper</value>
      </property>
      <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
      </property>
      <property>
        <name>hbase.zookeeper.quorum</name>
        <value>master,slave1,slave2</value>
      </property>
</configuration>
把配置好的hbase传到各节点

scp -r /usr/local/hadoop/hbase hadoop@slave1:/usr/local/hadoop/

修改子节点的./bashrc配置文件

添加

9202951-b9271b78fff537e8.png
image.png

使配置生效
source ~/.bashrc
https://www.cnblogs.com/zyrblog/p/8544114.html

master启动dfs和hbase

cd /usr/local/hadoop/
./sbin/start-dfs.sh
cd /usr/local/hadoop/hbase
./bin/start-hbase.sh

jps查看


9202951-dd8480cc0778628e.png
image.png

slave1查看


9202951-7a355c3b08888e68.png
image.png

web浏览器查看master:16010


9202951-b3b61b196cc1690c.png
image.png

hbase shell


9202951-13a1bb5a45193bf6.png
image.png

创建一个名为 test 的表,这个表只有一个column family 为 cf

分别插入了3行。第一个行key为row1, 列为 cf:a, 值是 value1。Hbase中的列是由 column family前缀和列的名字组成的,以冒号间隔。例如这一行的列名就是a.


9202951-6276a2b22463f07c.png
image.png

Scan这个表


9202951-416a734e2ae9d5da.png
image.png

Get一行


9202951-acd8e1279229cb06.png
image.png

disable 再 drop 这张表,可以清除你刚刚的操作

hbase(main):012:0> disable 'test'
0 row(s) in 1.0930 seconds
hbase(main):013:0> drop 'test'
0 row(s) in 0.0770 seconds 

关闭shell

hbase(main):014:0> exit

运行停止脚本来停止HBase.

./bin/stop-hbase.sh
9202951-3e96544f2270cca8.png
image.png

hive

1 安装mysql

安装
sudo apt-get install mysql-server mysql-client
进入mysql
mysql -u root -p

创建hive数据库
create database hive;

Ubuntu 16.04 设置MySQL远程访问权限

9202951-d2a6e11a81672bd2.png
image.png

下载hive安装包

hive安装包

安装

tar -zxvf apache-hive-2.3.4-bin.tar.gz
mv apache-hive-2.3.4-bin /usr/local/hadoop/hive

修改环境变量

gedit ~/.bashrc
添加
export HIVE_HOME=/usr/local/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin
使配置生效
source ~/.bashrc

下载mysql jdbc 包
jar包下载地址
下载方法

tar -zxvf mysql-connector-java-8.0.13.tar.gz 

将mysql-connector-java-8.0.13.jar 拷贝到 /usr/local/hadoop/hive


9202951-d90b3cd215fe45eb.png
image.png

创建HDFS目录

在 Hive 中创建表之前需要创建以下 HDFS 目录并给它们赋相应的权限

hdfs dfs -mkdir -p /root/hive/warehouse
hdfs dfs -mkdir -p /root/hive/tmp
hdfs dfs -mkdir -p /root/hive/log
hdfs dfs -chmod g+w /root/hive/warehouse
hdfs dfs -chmod g+w /root/hive/tmp
hdfs dfs -chmod g+w /root/hive/log

9202951-018b45edea1b4ac4.png
image.png

参考

配置

cd /usr/local/hadoop/hive/conf/
创建hive-site.xml
touch hive-site.xml
赋权
chmod 777 hive-site.xml

vi hive-site.xml

修改hive-site.xml

<configuration>
 <!-- 指定HDFS中的hive仓库地址 -->  
  <property>  
    <name>hive.metastore.warehouse.dir</name>  
    <value>/root/hive/warehouse</value>  
  </property>  

<property>
    <name>hive.exec.scratchdir</name>
    <value>/root/hive/tmp</value>
  </property>

  <!-- 该属性为空表示嵌入模式或本地模式,否则为远程模式 -->  
  <property>  
    <name>hive.metastore.uris</name>  
    <value></value>  
  </property>  

<!-- 指定mysql的连接 -->
 <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
<!-- 指定驱动类 -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
   <!-- 指定用户名 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <!-- 指定密码 -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>root</value>
    </property>
    <property>
   <name>hive.metastore.schema.verification</name>
   <value>false</value>
    <description>
    </description>
 </property> 
</configuration>

修改 hive-env.sh
cp hive-env.sh.template hive-env.sh

添加
HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hadoop/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/hadoop/hive/lib

初始化

cd /usr/local/hadoop/hive/bin
./schematool -initSchema -dbType mysql
9202951-50bc45b2cf16e251.png
image.png

启动hive

启动hive之前,请先启动hadoop集群

1.  cd /usr/local/hadoop
2.  ./sbin/start-all.sh
3.  cd /usr/local/hadoop/hive
4.  ./bin/hive
创建数据库
create database myhive;
使用数据库
use myhive;
创建表
create table test (id int,name string);
插入数据
insert into test values(1,"jsljfg");
9202951-0dc53338b892a665.png
image.png
9202951-4539baf575d8e24a.png
image.png

9202951-2699a5dc2ba3c7ab.png
image.png

参考 1
参考 2
参考 3

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP