大數(shù)據(jù)課程實(shí)驗(yàn)案例:網(wǎng)站用戶行為分析
案例目的
1.熟悉Linux系統(tǒng)、MySQL、Hadoop、HBase、Hive、Sqoop、R、Eclipse等系統(tǒng)和軟件的安裝和使用;
2.了解大數(shù)據(jù)處理的基本流程;
3.熟悉數(shù)據(jù)預(yù)處理方法;
4.熟悉在不同類型數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)相互導(dǎo)入導(dǎo)出;
5.熟悉使用R語言進(jìn)行可視化分析;
6.熟悉使用Elipse編寫Java程序操作HBase數(shù)據(jù)庫。
案例任務(wù)
1.安裝Linux操作系統(tǒng)
2.安裝關(guān)系型數(shù)據(jù)庫MySQL
3.安裝大數(shù)據(jù)處理框架Hadoop
4.安裝列族數(shù)據(jù)庫HBase
5.安裝數(shù)據(jù)倉庫Hive
6.安裝Sqoop
7.安裝R
8.安裝Eclipse
9.對(duì)文本文件形式的原始數(shù)據(jù)集進(jìn)行預(yù)處理
10.把文本文件的數(shù)據(jù)集導(dǎo)入到數(shù)據(jù)倉庫Hive中
11.對(duì)數(shù)據(jù)倉庫Hive中的數(shù)據(jù)進(jìn)行查詢分析
12.使用Sqoop將數(shù)據(jù)從Hive導(dǎo)入MySQL
13.使用Sqoop將數(shù)據(jù)從MySQL導(dǎo)入HBase
14.使用HBase Java API把數(shù)據(jù)從本地導(dǎo)入到HBase中
15.使用R對(duì)MySQL中的數(shù)據(jù)進(jìn)行可視化分析
說明:Word可能導(dǎo)致部分命令或代碼有問題,每一個(gè)步驟都提供參考鏈接,詳細(xì)查看參考鏈接
首先1.安裝Linux系統(tǒng);
參考https://dblab.xmu.edu.cn/blog/285/
以下是各軟件的安裝,通過啟動(dòng)來驗(yàn)證安裝
所有準(zhǔn)備好在這里
cd /home/hadoop/a
用戶準(zhǔn)備工作
sudo useradd -m hadoop -s /bin/bash
Shell 命令這條命令創(chuàng)建了可以登陸的 hadoop 用戶,并使用 /bin/bash 作為 shell。
接著使用如下命令設(shè)置密碼,可簡(jiǎn)單設(shè)置為 hadoop,按提示輸入兩次密碼:
sudo passwd hadoop
密碼:123
可為 hadoop 用戶增加管理員權(quán)限,方便部署,避免一些對(duì)新手來說比較棘手的權(quán)限問題:
sudo adduser hadoop sudo
更新apt
用 hadoop 用戶登錄后,我們先更新一下 apt,后續(xù)我們使用 apt 安裝軟件,如果沒更新可能有一些軟件安裝不了。按 ctrl+alt+t 打開終端窗口,執(zhí)行如下命令:
sudo apt-get update
修改各個(gè)節(jié)點(diǎn)的主機(jī)名
sudo vi /etc/homename
安裝ssh工具
1.打開終端鍵入如下命令:
apt-get update
apt-get install openssh-server
啟動(dòng)SSH服務(wù)
1.鍵入如下命令:
/etc/init.d/ssh start
重啟命令與關(guān)閉命令如下:
/etc/init.d/ssh restart #重啟SSH服務(wù)
/etc/init.d/ssh stop #關(guān)閉SSH服務(wù)
查看進(jìn)程,檢查是否啟動(dòng)成功,鍵入如下命令:
ps -e | grep sshd
配置root用戶SSH服務(wù)
Ubuntu中SSH服務(wù)安裝完成后查看是否允許root用戶登陸,若不允許則無法遠(yuǎn)程登陸root用戶,需要修改配置
1.首先,打開“/etc/ssh/sshd_config”
gedit /etc/ssh/sshd_config
2.查看是否有“PermitRootLogin yes”,沒有添加即可,完成后保存退出
解決進(jìn)程問題
sudo rm -r -f /var/lib/dpkg/lock
sudo rm -r -f /var/lib/dpkg/lock-frontend
安裝vim
sudo apt-get install vim
為當(dāng)前用戶設(shè)置權(quán)限
sudo chown -R 當(dāng)前用戶名 ./hadoop
軟件安裝注意?。。∠冉鈮汉密浖?,再去到解壓后所在目錄在開始運(yùn)行安裝命令
大數(shù)據(jù)實(shí)驗(yàn)軟件安裝詳細(xì)過程參考:
Linux操作系統(tǒng)的安裝:https://dblab.xmu.edu.cn/blog/285/
Hadoop安裝教程:https://dblab.xmu.edu.cn/blog/7/
MySQL的安裝:https://dblab.xmu.edu.cn/blog/1002/
HBase的安裝:https://dblab.xmu.edu.cn/blog/588/
Hive的安裝:https://dblab.xmu.edu.cn/blog/1080/
Sqoop的安裝:https://dblab.xmu.edu.cn/blog/1015/
2.安裝Hadoop;
Hadoop安裝教程參考https://dblab.xmu.edu.cn/blog/7/
我們選擇將 Hadoop 安裝至 /usr/local/ 中:
cd /home/hadoop/a
sudo tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local # 解壓到/usr/local中
cd /usr/local/
sudo mv hadoop-2.7.1/ ./hadoop
sudo chown -R hadoop /hadoop # 修改文件權(quán)限
Shell 命令
Hadoop 解壓后即可使用。輸入如下命令來檢查 Hadoop 是否可用,成功則會(huì)顯示 Hadoop 版本信息:
cd /usr/local/hadoop
./bin/hadoop version
安裝與啟動(dòng)
ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh
3.安裝MySQL;
詳細(xì)參考:https://dblab.xmu.edu.cn/blog/1002/
sudo apt-get update #更新軟件源
sudo apt-get install mysql-server #安裝mysql
啟動(dòng)和關(guān)閉mysql服務(wù)器:
service mysql start
密碼:123
service mysql stop
確認(rèn)是否啟動(dòng)成功,mysql節(jié)點(diǎn)處于LISTEN狀態(tài)表示啟動(dòng)成功:
sudo netstat -tap | grep mysql
啟動(dòng):service mysql start
sudo netstat -tap | grep mysql
mysql -u root -p
4.安裝HBase;
詳細(xì)參考:https://dblab.xmu.edu.cn/blog/588/
1.1 解壓安裝包hbase-1.1.2-bin.tar.gz放至路徑 /usr/local,命令如下:
cd /home/hadoop/a
sudo tar -zxf hbase-1.1.5-bin.tar.gz -C /usr/local
Shell 命令
1.2 將解壓的文件名hbase-1.1.2改為hbase,以方便使用,命令如下:
cd /usr/local
sudo mv /usr/local/ hbase-1.1.5 /usr/local/hbase
1.3 配置環(huán)境變量
將hbase下的bin目錄添加到path中,這樣,啟動(dòng)hbase就無需到/usr/local/hbase目錄下,大大的方便了hbase的使用。教程下面的部分還是切換到了/usr/local/hbase目錄操作,有助于初學(xué)者理解運(yùn)行過程,熟練之后可以不必切換。
編輯~/.bashrc文件加入如下內(nèi)容
vi ~/.bashrc
export PATH=$PATH:/usr/local/hbase/bin
保存后退出
再執(zhí)行source命令使上述配置在當(dāng)前終端立即生效
source ~/.bashrc
4 添加HBase權(quán)限
cd /usr/local
sudo chown -R hadoop ./hbase
#將hbase下的所有文件的所有者改為hadoop,hadoop是當(dāng)前用戶的用戶名。
啟動(dòng)測(cè)試
cd /usr/local/hbase
bin/start-hbase.sh
2.2 偽分布式模式配置
1.配置/usr/local/hbase/conf/hbase-env.sh。命令如下:
vi /usr/local/hbase/conf/hbase-env.sh
Shell 命令
配置JAVA_HOME,HBASE_CLASSPATH,HBASE_MANAGES_ZK.
HBASE_CLASSPATH設(shè)置為本機(jī)Hadoop安裝目錄下的conf目錄(即/usr/local/hadoop/conf)
vim /usr/local/hadoop/conf
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HBASE_CLASSPATH=/usr/local/hadoop/conf
export HBASE_MANAGES_ZK=true
2.配置/usr/local/hbase/conf/hbase-site.xml
用命令vi打開并編輯hbase-site.xml,命令如下:
vi /usr/local/hbase/conf/hbase-site.xml
hbase.rootdir hdfs://localhost:9000/hbase hbase.cluster.distributed true 接下來測(cè)試運(yùn)行HBase。 第一步:首先登陸ssh,之前設(shè)置了無密碼登陸,因此這里不需要密碼;再切換目錄至/usr/local/hadoop ;再啟動(dòng)hadoop,如果已經(jīng)啟動(dòng)hadoop請(qǐng)?zhí)^此步驟。命令如下: ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh 切換目錄至/usr/local/hbase;再啟動(dòng)HBase.命令如下: cd /usr/local/hbase bin/start-hbase.sh 進(jìn)入shell界面: bin/hbase shell 停止HBase運(yùn)行,命令如下: bin/stop-hbase.sh5.安裝Hive;啟動(dòng)驗(yàn)證
詳細(xì)過程參考Hive的安裝:https://dblab.xmu.edu.cn/blog/1080/
cd /home/hadoop/a
先把軟件解壓到/usr/local中,再執(zhí)行如下操作,這里不做演示了,接著如下
cd /usr/local/
sudo mv apache-hive-3.1.2-bin hive # 將文件夾名改為hive
sudo chown -R dblab:dblab hive # 修改文件權(quán)限
vim編輯器打開.bashrc文件,命令如下:
vim ~/.bashrc
在該文件最前面一行添加如下內(nèi)容:
export HIVE_HOME=/usr/local/hive
export PATH=
P
A
T
H
:
PATH:
PATH:HIVE_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
HADOOP_HOME需要被配置成你機(jī)器上Hadoop的安裝路徑,比如這里是安裝在/usr/local./hadoop目錄。
保存退出后,運(yùn)行如下命令使配置立即生效:
source ~/.bashrc
修改/usr/local/hive/conf下的hive-site.xml
執(zhí)行如下命令:
cd /usr/local/hive/conf
sudo mv hive-default.xml.template hive-default.xml
使用vim編輯器新建一個(gè)配置文件hive-site.xml,命令如下:
cd /usr/local/hive/conf
sudo vim hive-site.xml
在hive-site.xml中添加如下配置信息:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true JDBC connect string for a JDBC metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName hive username to use against metastore database javax.jdo.option.ConnectionPassword hive password to use against metastore database 然后,按鍵盤上的“ESC”鍵退出vim編輯狀態(tài),再輸入:wq,保存并退出vim編輯器。#將mysql-connector-java-5.1.40-bin.jar拷貝到/usr/local/hive/lib目錄下 解壓后
cd /自己軟件壓縮包的位置
sudo tar -zxvf mysql-connector-java-5.1.40.tar.gz
Sudo cp/home/hadoop/Desktop/mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/hive/lib
cd /usr/local/hive/lib
3.啟動(dòng)并登陸mysql
sudo service mysql start #啟動(dòng)mysql服務(wù)
mysql -u root -p #登陸shell界面
密碼:123
在終端上輸入以下命令重啟MySQL:
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
service mysql start #啟動(dòng)mysql服務(wù)
mysql -u root -p #登陸shell界面
- 新建hive數(shù)據(jù)庫。
mysql> create database hive; #這個(gè)hive數(shù)據(jù)庫與hive-site.xml中l(wèi)ocalhost:3306/hive的hive對(duì)應(yīng),用來保存hive元數(shù)據(jù)
mysql
5. 配置mysql允許hive接入:
先刷新一下權(quán)限表。
mysql> flush privileges;
mysql> grant all on . to hive@localhost identified by ‘hive’; #將所有數(shù)據(jù)庫的所有表的所有權(quán)限賦給hive用戶,后面的hive是配置hive-site.xml中配置的連接密碼
mysql> flush privileges; #刷新mysql系統(tǒng)權(quán)限關(guān)系表
注意!??!
啟動(dòng)hive之前,請(qǐng)先啟動(dòng)hadoop集群。
驗(yàn)證
cd /usr/local/hadoop
./sbin/start-all.sh
cd /usr/local/hive
./bin/hive
然后,執(zhí)行jps命令看一下當(dāng)前運(yùn)行的進(jìn)程:
1.jps
如果出現(xiàn)下面這些進(jìn)程,說明Hadoop啟動(dòng)成功了。
3765 NodeManager
3639 ResourceManager
3800 Jps
3261 DataNode
3134 NameNode
3471 SecondaryNameNode
6.安裝Sqoop;
詳細(xì)參考Sqoop的安裝:https://dblab.xmu.edu.cn/blog/1015/
cd /home/hadoop/a
sudo tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local #解壓安裝文件
cd /usr/local
sudo mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop #修改文件名
sudo chown -R hadoop:hadoop sqoop #修改文件夾屬主,如果你當(dāng)前登錄用戶名不是hadoop,
請(qǐng)修改成你自己的用戶名
2. 修改配置文件sqoop-env.sh
cd sqoop/conf/
cat sqoop-env-template.sh >> sqoop-env.sh
#將sqoop-env-template.sh復(fù)制一份并命名為sqoop-env.sh
vim sqoop-env.sh
#編輯sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export HIVE_HOME=/usr/local/hive
- 配置環(huán)境變量
打開當(dāng)前用戶的環(huán)境變量配置文件:
vim ~/.bashrc
在配置文件第一行鍵入如下信息:
export SQOOP_HOME=/usr/local/sqoop
export PATH= P A T H : PATH: PATH:SBT_HOME/bin: S Q O O P H O M E / b i n e x p o r t C L A S S P A T H = SQOOP_HOME/bin export CLASSPATH= SQOOPH?OME/binexportCLASSPATH=CLASSPATH:$SQOOP_HOME/lib
執(zhí)行下面命令讓配置文件立即生效:
source ~/.bashrc
將mysql驅(qū)動(dòng)包拷貝到
S
Q
O
O
P
H
O
M
E
/
l
i
b
下
面
要
把
M
y
S
Q
L
驅(qū)
動(dòng)
程
序
拷
貝
到
SQOOP_HOME/lib 下面要把MySQL驅(qū)動(dòng)程序拷貝到
SQOOPH?OME/lib下面要把MySQL驅(qū)動(dòng)程序拷貝到SQOOP_HOME/lib目錄下,首先請(qǐng)?jiān)贚inux系統(tǒng)的瀏覽器中請(qǐng)點(diǎn)擊mysql驅(qū)動(dòng)包下載地址下載驅(qū)動(dòng)包。下載后,一般文件會(huì)被瀏覽器默認(rèn)放置在當(dāng)前用戶的下載目錄下,本教程采用hadoop用戶登錄Linux系統(tǒng),因此,下載文件被默認(rèn)放置在“/home/hadoop/下載”目錄下面。
下面執(zhí)行命令拷貝文件:
去到軟件所在目錄
cd /home/hadoop/a
#解壓mysql驅(qū)動(dòng)包
sudo tar -zxvf mysql-connector-java-5.1.40.tar.gz
#解壓mysql驅(qū)動(dòng)包
ls #這時(shí)就可以看到解壓縮后得到的目錄mysql-connector-java-5.1.40
cp ./mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/sqoop/lib
cd /usr/local/sqoop/lib
測(cè)試與MySQL的連接
首先請(qǐng)確保mysql服務(wù)已經(jīng)啟動(dòng)了,如果沒有啟動(dòng),請(qǐng)執(zhí)行下面命令啟動(dòng):
service mysql start
密碼:123
然后就可以測(cè)試sqoop與MySQL之間的連接是否成功:
測(cè)試sqoop與MySQL之間的連接是否成功:
sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username root -P
7.安裝R;(這里有時(shí)遇到問題自己都解決不了)Ubuntu 18 版本這里的問題實(shí)在沒法解決?。?br> 利用vim打開/etc/apt/sources.list文件
1.sudo vim /etc/apt/sources.list
在文件的最后一行添加廈門大學(xué)的鏡像源:
deb http://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/linux/ubuntu/ trusty/
退出vim,更新軟件源列表
1.sudo apt-get update
如果更新軟件源出現(xiàn)由于沒有公鑰,無法驗(yàn)證下列簽名的錯(cuò)誤,請(qǐng)執(zhí)行如下命令: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9
安裝R語言
1.sudo apt-get install r-base
Shell 命令
會(huì)提示“您希望繼續(xù)執(zhí)行嗎?[Y/n]”,可以直接鍵盤輸入“Y”,就可以順利安裝結(jié)束。
安裝結(jié)束后,可以執(zhí)行下面命令啟動(dòng)R:
1.R
啟動(dòng)后,會(huì)顯示如下信息,并進(jìn)入“>”命令提示符狀態(tài):
R version 3.3.2 (2016-10-31) – “Sincere Pumpkin Patch”
Copyright ? 2016 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R是自由軟件,不帶任何擔(dān)保。
在某些條件下你可以將其自由散布。
用’license()'或’licence()'來看散布的詳細(xì)條件。
R是個(gè)合作計(jì)劃,有許多人為之做出了貢獻(xiàn).
用’contributors()'來看合作者的詳細(xì)情況
用’citation()'會(huì)告訴你如何在出版物中正確地引用R或R程序包。
用’demo()'來看一些示范程序,用’help()'來閱讀在線幫助文件,或
用’help.start()'通過HTML瀏覽器來看幫助文件。
用’q()'退出R.
“>”就是R的命令提示符,你可以在后面輸入R語言命令。
可以執(zhí)行下面命令退出R:
1.>q()
- 安裝Eclipse
本地?cái)?shù)據(jù)集上傳到數(shù)據(jù)倉庫Hive
user.zip下載地址:https://pan.baidu.com/s/1nuOSo7B
首先建立一個(gè)用于運(yùn)行本案例的目錄bigdatacase
如果你把user.zip下載到了其他目錄,這里請(qǐng)進(jìn)入到你自己的存放user.zip的目錄。
下面需要把user.zip進(jìn)行解壓縮,我們需要首先建立一個(gè)用于運(yùn)行本案例的目錄bigdatacase
請(qǐng)執(zhí)行以下命令:user.zip注意自己的文件目錄
1.cd /usr/local
2.ls
3.sudo mkdir bigdatacase
4.//這里會(huì)提示你輸入當(dāng)前用戶(本教程是hadoop用戶名)的密碼
5.//下面給hadoop用戶賦予針對(duì)bigdatacase目錄的各種操作權(quán)限
6.sudo chown -R hadoop:hadoop ./bigdatacase
7.cd bigdatacase
8.//下面創(chuàng)建一個(gè)dataset目錄,用于保存數(shù)據(jù)集
9.mkdir dataset
10.//下面就可以解壓縮user.zip文件
11.cd ~ //表示進(jìn)入hadoop用戶的目錄
12.cd 下載
13.ls
14.unzip user.zip -d /usr/local/bigdatacase/dataset
15.cd /usr/local/bigdatacase/dataset
16.ls
raw_user.csv和small_user.csv。
我們執(zhí)行下面命令取出前面5條記錄看一下:
head -5 raw_user.csv
數(shù)據(jù)集的預(yù)處理詳細(xì)參考:https://dblab.xmu.edu.cn/blog/959/
1.刪除文件第一行記錄,即字段名稱
raw_user和small_user中的第一行都是字段名稱,我們?cè)谖募械臄?shù)據(jù)導(dǎo)入到數(shù)據(jù)倉庫Hive中時(shí),不需要第一行字段名稱,因此,這里在做數(shù)據(jù)預(yù)處理時(shí),刪除第一行
cd /usr/local/bigdatacase/dataset
//下面刪除raw_user中的第1行
sed -i ‘1d’ raw_user //1d表示刪除第1行,同理,3d表示刪除第3行,nd表示刪除第n行
//下面刪除small_user中的第1行
sed -i ‘1d’ small_user
//下面再用head命令去查看文件的前5行記錄,就看不到字段名稱這一行了
head -5 raw_user.csv
可以看出,每行記錄都包含5個(gè)字段,數(shù)據(jù)集中的字段及其含義如下:
user_id(用戶id)
item_id(商品id)
behaviour_type(包括瀏覽、收藏、加購物車、購買,對(duì)應(yīng)取值分別是1、2、3、4)
user_geohash(用戶地理位置哈希值,有些記錄中沒有這個(gè)字段值,所以后面我們會(huì)用腳本做數(shù)據(jù)預(yù)處理時(shí)把這個(gè)字段全部刪除)
item_category(商品分類)
time(該記錄產(chǎn)生時(shí)間)
2.對(duì)字段進(jìn)行預(yù)處理
下面對(duì)數(shù)據(jù)集進(jìn)行一些預(yù)處理,包括為每行記錄增加一個(gè)id字段(讓記錄具有唯一性)、增加一個(gè)省份字段(用來后續(xù)進(jìn)行可視化分析),并且丟棄user_geohash字段(后面分析不需要這個(gè)字段)。
下面我們要建一個(gè)腳本文件pre_deal.sh,請(qǐng)把這個(gè)腳本文件放在dataset目錄下,和數(shù)據(jù)集small_user.csv放在同一個(gè)目錄下:
cd /usr/local/bigdatacase/dataset
vim pre_deal.sh
上面使用vim編輯器新建了一個(gè)pre_deal.sh腳本文件,請(qǐng)?jiān)谶@個(gè)腳本文件中加入下面代碼:
(Word文檔導(dǎo)致部分代碼可能出錯(cuò)參考https://dblab.xmu.edu.cn/blog/959/
)
#!/bin/bash
#下面設(shè)置輸入文件,把用戶執(zhí)行pre_deal.sh命令時(shí)提供的第一個(gè)參數(shù)作為輸入文件名稱
infile=$1
#下面設(shè)置輸出文件,把用戶執(zhí)行pre_deal.sh命令時(shí)提供的第二個(gè)參數(shù)作為輸出文件名稱
outfile=KaTeX parse error: Expected 'EOF', got '#' at position 3: 2 #?注意!!最后的infile > $outfile必須跟在}’這兩個(gè)字符的后面
awk -F “,” ‘BEGIN{
srand();
id=0;
Province[0]=“山東”;Province[1]=“山西”;Province[2]=“河南”;Province[3]=“河北”;Province[4]=“陜西”;Province[5]=“內(nèi)蒙古”;Province[6]=“上海市”;
Province[7]=“北京市”;Province[8]=“重慶市”;Province[9]=“天津市”;Province[10]=“福建”;Province[11]=“廣東”;Province[12]=“廣西”;Province[13]=“云南”;
Province[14]=“浙江”;Province[15]=“貴州”;Province[16]=“新疆”;Province[17]=“西藏”;Province[18]=“江西”;Province[19]=“湖南”;Province[20]=“湖北”;
Province[21]=“黑龍江”;Province[22]=“吉林”;Province[23]=“遼寧”; Province[24]=“江蘇”;Province[25]=“甘肅”;Province[26]=“青?!?Province[27]=“四川”;
Province[28]=“安徽”; Province[29]=“寧夏”;Province[30]=“海南”;Province[31]=“香港”;Province[32]=“澳門”;Province[33]=“臺(tái)灣”;
}
{
id=id+1;
value=int(rand()*34);
print id"\t"$1"\t"$2"\t"$3"\t"$5"\t"substr($6,1,10)"\t"Province[value]
}’ $infile > $outfile
輸入后查看
上面的代碼的基本形式是:
awk -F “,” ‘處理邏輯’ $infile > $outfile
使用awk可以逐行讀取輸入文件,并對(duì)逐行進(jìn)行相應(yīng)操作。
下面就可以執(zhí)行pre_deal.sh腳本文件,來對(duì)small_user.csv進(jìn)行數(shù)據(jù)預(yù)處理,命令如下:
cd /usr/local/bigdatacase/dataset
bash ./pre_deal.sh small_user.csv user_table.txt
可以使用head命令查看生成的user_table.txt,不要直接打開,文件過大,會(huì)出錯(cuò),下面查看前10行數(shù)據(jù):
head -10 user_table.txt
a.啟動(dòng)HDFS
請(qǐng)登錄Linux系統(tǒng),打開一個(gè)終端,執(zhí)行下面命令啟動(dòng)Hadoop:
cd /usr/local/hadoop
./sbin/start-all.sh
Shell 命令
然后,執(zhí)行jps命令看一下當(dāng)前運(yùn)行的進(jìn)程:
jps
如果出現(xiàn)下面這些進(jìn)程,說明Hadoop啟動(dòng)成功了。
3765 NodeManager
3639 ResourceManager
3800 Jps
3261 DataNode
3134 NameNode
3471 SecondaryNameNode
b.把user_table.txt上傳到HDFS中
現(xiàn)在,我們要把Linux本地文件系統(tǒng)中的user_table.txt上傳到分布式文件系統(tǒng)HDFS中,存放在HDFS中的“/bigdatacase/dataset”目錄下。
首先,請(qǐng)執(zhí)行下面命令,在HDFS的根目錄下面創(chuàng)建一個(gè)新的目錄bigdatacase,并在這個(gè)目錄下創(chuàng)建一個(gè)子目錄dataset,如下:
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /bigdatacase/dataset
然后,把Linux本地文件系統(tǒng)中的user_table.txt上傳到分布式文件系統(tǒng)HDFS的“/bigdatacase/dataset”目錄下,命令如下:
cd /usr/local/hadoop
./bin/hdfs dfs -put /usr/local/bigdatacase/dataset/user_table.txt /bigdatacase/dataset
下面可以查看一下HDFS中的user_table.txt的前10條記錄,命令如下:
cd /usr/local/hadoop
./bin/hdfs dfs -cat /bigdatacase/dataset/user_table.txt | head -10
c.在Hive上創(chuàng)建數(shù)據(jù)庫
下面,請(qǐng)?jiān)贚inux系統(tǒng)中,再新建一個(gè)終端(可以在剛才已經(jīng)建好的終端界面的左上角,點(diǎn)擊“終端”菜單,在彈出的子菜單中選擇“新建終端”)。因?yàn)樾枰柚贛ySQL保存Hive的元數(shù)據(jù),所以,請(qǐng)首先啟動(dòng)MySQL數(shù)據(jù)庫:
啟動(dòng)MySQL
service mysql start //可以在Linux的任何目錄下執(zhí)行該命令
由于Hive是基于Hadoop的數(shù)據(jù)倉庫,使用HiveQL語言撰寫的查詢語句,最終都會(huì)被Hive自動(dòng)解析成MapReduce任務(wù)由Hadoop去具體執(zhí)行,因此,需要啟動(dòng)Hadoop,然后再啟動(dòng)Hive。由于前面我們已經(jīng)啟動(dòng)了Hadoop,所以,這里不需要再次啟動(dòng)Hadoop。下面,在這個(gè)新的終端中執(zhí)行下面命令進(jìn)入Hive:
啟動(dòng)Hive
cd /usr/local/hive
./bin/hive
啟動(dòng)成功以后,就進(jìn)入了“hive>”命令提示符狀態(tài),可以輸入類似SQL語句的HiveQL語句。
hive> create database dblab;
hive> use dblab;
hive
d.創(chuàng)建外部表
關(guān)于數(shù)據(jù)倉庫Hive的內(nèi)部表和外部表的區(qū)別,請(qǐng)?jiān)L問網(wǎng)絡(luò)文章《Hive內(nèi)部表與外部表的區(qū)別》。本教程采用外部表方式。
這里我們要在數(shù)據(jù)庫dblab中創(chuàng)建一個(gè)外部表bigdata_user,它包含字段(id, uid, item_id, behavior_type, item_category, date, province),請(qǐng)?jiān)趆ive命令提示符下輸入如下命令:
hive> CREATE EXTERNAL TABLE dblab.bigdata_user(id INT,uid STRING,item_id STRING,behavior_type INT,item_category STRING,visit_date DATE,province STRING) COMMENT ‘Welcome to xmu dblab!’ ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ STORED AS TEXTFILE LOCATION ‘/bigdatacase/dataset’;
hive
對(duì)于這條語句中LOCATION參數(shù)的含義如果有疑問,可以閱讀博客《關(guān)于數(shù)據(jù)倉庫Hive建表時(shí)的LOCATION參數(shù)問題》。
e.查詢數(shù)據(jù)
上面已經(jīng)成功把HDFS中的“/bigdatacase/dataset”目錄下的數(shù)據(jù)加載到了數(shù)據(jù)倉庫Hive中,我們現(xiàn)在可以使用下面命令查詢一下:
hive> select * from bigdata_user limit 10;
hive> select behavior_type from bigdata_user limit 10;
Hive數(shù)據(jù)分析參考:https://dblab.xmu.edu.cn/blog/1005/
操作Hive
請(qǐng)登錄Linux系統(tǒng)(本教程統(tǒng)一采用hadoop用戶名登錄系統(tǒng)),然后,打開一個(gè)終端(可以按快捷鍵Ctrl+Alt+T)。
本教程中,Hadoop的安裝目錄是“/usr/local/hadoop”,Hive的安裝目錄是“/usr/local/hive”。
因?yàn)樾枰柚贛ySQL保存Hive的元數(shù)據(jù),所以,請(qǐng)首先啟動(dòng)MySQL數(shù)據(jù)庫,請(qǐng)?jiān)诮K端中輸入下面命令:
service mysql start //可以在Linux的任何目錄下執(zhí)行該命令
請(qǐng)執(zhí)行下面命令啟動(dòng)Hadoop(如果你已經(jīng)啟動(dòng)了Hadoop就不用再次啟動(dòng)了):
cd /usr/local/hadoop
./sbin/start-all.sh
執(zhí)行jps命令看一下當(dāng)前運(yùn)行的進(jìn)程:
jps
繼續(xù)執(zhí)行下面命令啟動(dòng)進(jìn)入Hive:
cd /usr/local/hive
./bin/hive //啟動(dòng)Hive
在“hive>”命令提示符狀態(tài)下執(zhí)行下面命令:
hive> use dblab; //使用dblab數(shù)據(jù)庫
hive> show tables; //顯示數(shù)據(jù)庫中所有表。
hive> show create table bigdata_user; //查看bigdata_user表的各種屬性;
執(zhí)行部分結(jié)果如下:
可以執(zhí)行下面命令查看表的簡(jiǎn)單結(jié)構(gòu):
hive> desc bigdata_user;
執(zhí)行部分結(jié)果如下:
二、簡(jiǎn)單查詢分析
先測(cè)試一下簡(jiǎn)單的指令:
hive> select behavior_type from bigdata_user limit 10;//查看前10位用戶對(duì)商品的行為
執(zhí)行部分結(jié)果如下:
三、查詢條數(shù)統(tǒng)計(jì)分析
(1)用聚合函數(shù)count()計(jì)算出表內(nèi)有多少條行數(shù)據(jù)
hive> select count(*) from bigdata_user;//用聚合函數(shù)count()計(jì)算出表內(nèi)有多少條行數(shù)據(jù)
執(zhí)行結(jié)果部分如下:
可視化分析MySQL中的數(shù)據(jù)
(按步驟操作,這里要先快照備份,有可能會(huì)出錯(cuò)自己解決不了,否則前功盡棄)
安裝依賴庫
為了完成可視化功能,我們需要為R安裝一些依賴庫,包括:RMySQL、ggplot2、devtools和recharts。
RMySQL是一個(gè)提供了訪問MySQL數(shù)據(jù)庫的R語言接口程序的R語言依賴庫。
ggplot2和recharts則是R語言中提供繪圖可視化功能的依賴庫。
請(qǐng)啟動(dòng)R進(jìn)入R命令提示符狀態(tài),執(zhí)行如下命令安裝RMySQL:
1.> install.packages(‘RMySQL’)
R
上面命令執(zhí)行后, 屏幕會(huì)提示"Would you like to user a personal library instead?(y/n)"等問題,只要遇到提問,都在鍵盤輸入y后回車即可。然后,屏幕會(huì)顯示“—在此連線階段時(shí)請(qǐng)選用CRAN的鏡子—”,并會(huì)彈出一個(gè)白色背景的豎條形窗口,窗口標(biāo)題是“HTTPS CRAN mirros”,標(biāo)題下面列出了很多國家的鏡像列表,我們可以選擇位于China的鏡像,比如,選擇“China(Beijing)[https]”,然后點(diǎn)擊“ok”按鈕,就開始安裝了。安裝過程需要幾分鐘(當(dāng)然,也和當(dāng)前網(wǎng)絡(luò)速度有關(guān)系)。
由于不同用戶的Ubuntu開發(fā)環(huán)境不一樣,安裝有很大可能因?yàn)槿鄙俳M件導(dǎo)致失敗,如果出現(xiàn)如下錯(cuò)誤信息:
Configuration failed because libmysqlclient was not found. Try installing:
- deb: libmariadb-client-lgpl-dev (Debian, Ubuntu 16.04)
libmariadbclient-dev (Ubuntu 14.04) - rpm: mariadb-devel | mysql-devel (Fedora, CentOS, RHEL)
- csw: mysql56_dev (Solaris)
- brew: mariadb-connector-c (OSX)
…
ERROR: configuration failed for package ‘RMySQL’ - removing ‘/home/hadoop/R/x86_64-pc-linux-gnu-library/3.3/RMySQL’
下載的程序包在‘/tmp/RtmpvEArxz/downloaded_packages’里
Warning message:
In install.packages(“RMySQL”) : 安裝程序包‘RMySQL’時(shí)退出狀態(tài)的值不是0
只要根據(jù)錯(cuò)誤給出的錯(cuò)誤信息,進(jìn)行操作即可。q()退出R命令提示符狀態(tài),回到Shell狀態(tài),筆者的系統(tǒng)是Ubuntu 16.04,那么,根據(jù)上面的英文錯(cuò)誤信息,就需要在Shell命令提示符狀態(tài)下執(zhí)行下面命令安裝libmariadb-client-lgpl-dev:
1.sudo apt-get install libmariadb-client-lgpl-dev
然后,再次輸入下面命令進(jìn)入R命令提示符狀態(tài):
1.R
啟動(dòng)后,并進(jìn)入“>”命令提示符狀態(tài)。然后,執(zhí)行如下命令安裝繪圖包ggplot2,如果還出現(xiàn)缺少組件的錯(cuò)誤,請(qǐng)按照上面的解決方案解決!
1.> install.packages(‘ggplot2’)
R
然后,屏幕會(huì)顯示“—在此連線階段時(shí)請(qǐng)選用CRAN的鏡子—”,并會(huì)彈出一個(gè)白色背景的豎條形窗口,窗口標(biāo)題是“HTTPS CRAN mirros”,標(biāo)題下面列出了很多國家的鏡像列表,我們可以選擇位于China的鏡像,比如,選擇“China(Beijing)[https]”,然后點(diǎn)擊“ok”按鈕,就開始安裝了。這個(gè)命令運(yùn)行后,大概需要安裝10分鐘時(shí)間(當(dāng)然,也和當(dāng)前網(wǎng)絡(luò)速度有關(guān)系)。
下面繼續(xù)運(yùn)行下面命令安裝devtools:
1.> install.packages(‘devtools’)
R
如果在上面安裝devtools的過程中,又出現(xiàn)了錯(cuò)誤,處理方法很簡(jiǎn)單,還是按照上面介紹的方法,根據(jù)屏幕上給出的英文錯(cuò)誤信息,缺少什么軟件,就用sudo apt-get install命令安裝該軟件就可以了。筆者在Ubuntu16.04上執(zhí)行devtools安裝時(shí),出現(xiàn)了三次錯(cuò)誤,筆者根據(jù)每次錯(cuò)誤的英文提示信息,安裝了三個(gè)軟件libssl-dev、libssh2-1-dev、libcurl4-openssl-dev,安裝命令如下:
1.sudo apt-get install libssl-dev
2.sudo apt-get install libssh2-1-dev
3.sudo apt-get install libcurl4-openssl-dev
Shell 命令
讀者在安裝過程中,可能會(huì)出現(xiàn)不同的錯(cuò)誤,按照同樣的處理方法可以順利解決。
下面在R命令提示符下再執(zhí)行如下命令安裝taiyun/recharts:
1.> devtools::install_github(‘taiyun/recharts’)
結(jié)果測(cè)試與效果演示步驟
ssh localhost
cd /usr/local/hadoop
./sbin/start-dfs.sh
MySQL
service mysql start
sudo netstat -tap | grep mysql
mysql -u root -p
密碼:123
cd /usr/local/hadoop
./sbin/start-dfs.sh
cd /usr/local/hive
./bin/hive
jps
輸入 R
接著輸入如下
接著輸入
summary(user_action
b
e
h
a
v
i
o
r
t
y
p
e
)
s
u
m
m
a
r
y
(
a
s
.
n
u
m
e
r
i
c
(
u
s
e
r
a
c
t
i
o
n
behavior_type) summary(as.numeric(user_action
behaviort?ype)summary(as.numeric(usera?ctionbehavior_type))
library(ggplot2)
ggplot(user_action,aes(as.numeric(behavior_type)))+geom_histogram()
結(jié)果展示
temp <- subset(user_action,as.numeric(behavior_type)==4) # 獲取子數(shù)據(jù)集
count <- sort(table(temp$item_category),decreasing = T) #排序
print(count[1:10]) # 獲取第1到10個(gè)排序結(jié)果
result <- as.data.frame(count[1:10]) #將count矩陣結(jié)果轉(zhuǎn)換成數(shù)據(jù)框
ggplot(result,aes(Var1,Freq,col=factor(Var1)))+geom_point()
month <- substr(user_action$visit_date,6,7) # visit_date變量中截取月份
user_action <- cbind(user_action,month) # user_action增加一列月份數(shù)據(jù)
ggplot(user_action,aes(as.numeric(behavior_type),col=factor(month)))+geom_histogram()+facet_grid(.~month)
library(recharts)
rel <- as.data.frame(table(temp
p
r
o
v
i
n
c
e
)
)
p
r
o
v
i
n
c
e
s
<
?
r
e
l
province)) provinces <- rel
province))provinces<?relVar1
x = c()
for(n in provinces){
x[length(x)+1] = nrow(subset(temp,(province==n)))
}
mapData <- data.frame(province=rel$Var1,
count=x, stringsAsFactors=F) # 設(shè)置地圖信息
eMap(mapData, namevar=~province, datavar = ~count) #畫出中國地圖
驗(yàn)收效果展示與說明
測(cè)試演示命令匯總?cè)缦?br>
以上是關(guān)鍵步驟匯總 參考:https://dblab.xmu.edu.cn/
Ubuntu 16.04 Linux空白模板(只含大數(shù)據(jù)軟件在桌面,可以在VM虛擬機(jī)導(dǎo)入使用)
這個(gè)空白Linux虛擬機(jī)模板,在VM導(dǎo)入即可使用可以在此模板,
自己可以在這個(gè)空白Linux虛擬機(jī)模板從頭開始搭建大數(shù)據(jù)課程實(shí)驗(yàn)案例:網(wǎng)站用戶行為分析。
重磅:大數(shù)據(jù)課程實(shí)驗(yàn)案例:網(wǎng)站用戶行為分析(免費(fèi)共享)鏈接如下:
https://dblab.xmu.edu.cn/
空白Linux虛擬機(jī)模板(只含大數(shù)據(jù)壓縮軟件包)
下載好就到導(dǎo)入空白Linux虛擬機(jī)模板
找到下載好模板的路徑選擇如下文件打開
重命名Ubuntu16.04 qjp
導(dǎo)入完成如下
開機(jī)之后如下文章來源:http://www.zghlxwxcb.cn/news/detail-449486.html
有需要Linux空白模板請(qǐng)告知
完整實(shí)驗(yàn)環(huán)境對(duì)外不提供,僅供個(gè)人學(xué)習(xí)使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-449486.html
到了這里,關(guān)于大數(shù)據(jù)期末課程設(shè)計(jì)實(shí)驗(yàn)案例:網(wǎng)站用戶行為分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!