CDH5 Hadoop集群完全离线安装说明

CDH5

Hadoop集群完全离线安装说明

系统环境:CentOS6.5 64位


用到的文件

JDK1.8.0.111安装包

方法一使用:jdk-8u111-linux-x64.rpm

方法二使用:jdk-8u111-linux-x64.tar.gz




JDK环境配置(所有节点)

(先用命令:rpm -qa |

grep java

查看系统是否已自带了openjdk,若系统自带了openjdk,需要先卸载掉,方法参照后面说明)

通常有两种方式来安装JDK,根据从Oracle官网上下载的文件扩展名(tar.gz和.rpm),分别说明两种安装配置方式:

方法一:用rpm安装JDK

如果主机能访问外网,则联网下载安装包

[root@one-centos ~]#curl -O

http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.rpm

若不能访问外网,则使用离线包,将下载好的rpm包上传到主机某文件夹下(比如/home/root/下载)

[root@one-centos ~]#cd 下载

使用rpm命令安装:

[root@one-centos 下载] #rpm

-ivh jdk-8u111-linux-x64.rpm

[if !vml]

[endif]

设置环境变量:

[root@one-centos 下载]#vim/etc/profile

在打开的profile文件中添加如下内容:

#set java environment

JAVA_HOME=/usr/java/jdk1.8.0_111

JRE_HOME=/usr/java/jdk1.8.0_111/jre

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME JRE_HOME CLASS_PATH PATH

[if !vml]

[endif]

让修改生效

[root@one-centos 下载]#source

/etc/profile

验证JDK有效性:

[root@one-centos yt]#java -version

[root@one-centos yt]#java

[root@one-centos yt]#javac

[if !vml]

[endif]

[root@one-centos yt]#echo $JAVA_HOME

/usr/java/jdk1.8.0_111


方法二:用tar.gz包安装JDK

在/usr/目录下创建java目录:

[root@localhost ~]#mkdir/usr/java

[root@localhost ~]#cd /usr/java

下载JDK,然后解压:

[root@localhost java]#curl -O

http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz

[root@localhost java]#tar -zxvf jdk-8u111-linux-x64.tar.gz

设置环境变量:(同上)

[root@one-centos 下载]#vim/etc/profile

在打开的profile文件中添加如下内容:

#set java environment

JAVA_HOME=/usr/java/jdk1.8.0_111

JRE_HOME=/usr/java/jdk1.8.0_111/jre

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME JRE_HOME CLASS_PATH PATH

让修改生效:(同上)

[root@one-centos 下载]#source

/etc/profile

验证JDK有效性:(同上)

[root@one-centos yt]#java -version

[root@one-centos yt]#java

[root@one-centos yt]#javac

[if !vml]

[endif]

[root@one-centos yt]#echo $JAVA_HOME

/usr/java/jdk1.8.0_111


卸载Linux自带的openjdk

安装了centos7系统,发现自带了openjdk,想删除centos自带的jdk。具体方法如下:

1.使用rpm命令查看系统已经安装的java包

[root@dev]# rpm -qa | grep java

java-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64

javapackages-tools-3.4.1-11.el7.noarch

tzdata-java-2016f-1.el7.noarch

java-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64

Python-javapackages-3.4.1-11.el7.noarch 


2.使用rpm命令删除已安装的java依赖

[root@dev]#  rpm -e --nodepsJava-1.8.0-openjdk-1.8.0.101-3.b13.el7_2.x86_64

[root@dev]#  rpm -e --nodepsjava-1.8.0-openjdk-headless-1.8.0.101-3.b13.el7_2.x86_64

[root@dev]#  rpm -e --nodeps tzdata-java-2016f-1.el7.noarch

[root@dev]#  rpm -e --nodepsjavapackages-tools-3.4.1-11.el7.noarch

[root@dev]#  rpm -e --nodepspython-javapackages-3.4.1-11.el7.noarch


3.再次检查java相关依赖以删除

[root@dev]# rpm -qa | grep java

[root@dev]# java -version


如果输出类似not found command则说明删除完成!


网络环境配置(所有节点)

我部署的集群中包括4个节点:1个master,3个salve,节点之间局域网连接,可以相互ping通。节点IP地址分布如下:

机器名称                               IP地址

master                                  10.1.34.59

slave1                                  10.1.34.66

slave2                                  10.1.34.67

slave3                                  10.1.34.68


主机名配置

下面以master机器为例,即主机名为“master”,IP为“10.1.34.59”进行主机的配置,他的slave机器以此为依据进行修改。

命令hostname可查看当前主机名

修改hostname:

[root@master ~]#vim

/etc/sysconfig/network

[if !vml]

[endif]

配置完成之后,我们需要重启主机,命令:

[root@master ~]#reboot

(注:CentOS7以上系统修改主机名见附录


配置hosts文件

“/etc/hosts”这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应HostName和IP用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。

在进行Hadoop集群配置中,需要在“/etc/hosts”文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的“/etc/hosts”文件末尾中都要添加如下内容:

[root@master ~]#vim

/etc/hosts

10.1.34.59 master

10.1.34.66 slave1

10.1.34.67 slave2

10.1.34.68 slave3

[if !vml]

[endif]

[if !vml]

[endif]

从上图中我们已经能用主机名进行ping通了,说明我们刚才添加的内容,在局域网内能进行DNS解析了,那么现在剩下的事儿就是在其余的slave机器上进行相同的配置。然后进行测试。


关闭防火墙

本文档是假定“服务器在防火墙以内”的前提下编纂的,在这个前提下,服务器本身在内部网络是不需要防火墙的(在需要抵御内部安全威胁的情况下,您也可以用您在iptables方面的相关知识,根据实情设置防火前,并保证服务器端防火墙启动的状态)。另外,在一般情况下,我们不需要SELinux复杂的保护,所以也将其设置为无效的状态。

关闭防火墙

[root@master ~]#serviceiptables stop

(注:service iptables stop (临时关闭)

chkconfig iptables off (重启后生效)

防火墙相关操作命令见附录


关闭SELinux

[root@master ~]#vim/etc/sysconfig/selinux

将SELINUX=enforcing修改为SELINUX=disabled

[if !vml]

[endif]

(注:setenforce 0 (临时生效))


SSH无密码验证配置

Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。

安装和启动SSH协议

[root@master ~]#rpm

-qa | grep openssh

[root@master ~]#rpm

-qa | grep rsync

[if !vml]

[endif]

(注:我的本机已经安装了openssh和rsync,如果没有安装,可执行如下命令进行安装:

yum install ssh

yum install rsync

service sshd restart

要确保所有的服务器都安装了这两个工具)


配置master无密码登录所有salve

SSH无密码原理

[if !vml]

[endif]

[if !vml]

[endif]

SSH无密码原理简介:

master(NameNode |JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器salve(DataNode | Tasktracker)上时,需要在master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的slave上。当master通过SSH连接salve时,salve就会生成一个随机数并用master的公钥对随机数进行加密,并发送给master。master收到加密数之后再用私钥解密,并将解密数回传给slave,slave确认解密数无误之后就允许master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。

master机器上生成密码对

在master节点上执行以下命令(以root账户登录):

[root@master root]#ssh-keygen -t rsa -P ''

这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在“/home/hadoop/.ssh”目录下。

[if !vml]

[endif]

查看/home/hadoop/下是否有.ssh文件夹,且.ssh文件下是否有两个刚生产的无密码密钥对:

[if !vml]

[endif]

接着在master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。

[root@master .ssh]#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在验证前,需要做两件事儿。第一件事儿是修改文件authorized_keys权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置/etc/ssh/sshd_config的内容。使其无密码登录有效。

修改文件authorized_keys:

[root@master .ssh]#chmod 600 ~/.ssh/authorized_keys

设置SSH配置:

用root用户登录服务器修改SSH配置文件/etc/ssh/sshd_config的下列内容

[root@master .ssh]#vim /etc/ssh/sshd_config

[if !vml]

[endif]

(注:参数说明如下:

RSAAuthentication yes   #启用RSA认证

PubkeyAuthentication yes   #启用公钥私钥配对认证方式

AuthorizedKeysFile     .ssh/authorized_keys   #公钥文件路径,和上面生成的文件相同)

[if !vml]

[endif]

设置完之后重启SSH服务,能使刚才设置有效。

[root@master .ssh]#service sshd restart

[if !vml]

[endif]

验证是否成功。

[root@master .ssh]#ssh localhost

[if !vml]

[endif]

从上图得知无密码登录本机已经设置完毕,接下来是把公钥复制所有的slave机器上。


在往下做之前,把其他几台的公钥私钥全部产生,参照以上步骤。


使用下面的命令格式进行复制公钥:

scp ~/.ssh/id_rsa.pub远程用户名@远程服务器IP:~/


把master上的公钥复制到slave1上:

[hadoop@master .ssh]$scp ~/.ssh/id_rsa.pub hadoop@slave1:~/

[if !vml]

[endif]

从被复制的Slave机上可以用ls –a查看确实存在id_rsa.pub这个文件:

[root@slave1 ~]#ll

-a

[if !vml]

[endif]

依据以上方式,分别复制到其他几台slave主机的根目录下。

在所有slave机上,将公钥添加到授权密钥文件authorized_keys内(添加完成后,把/home/hadoop/目录下的id_rsa.pub文件删除掉):

[root@slave1 ~]#cat

~/id_rsa.pub >> ~/.ssh/authorized_keys

[if !vml]

[endif]


配置所有slave无密码登录master

和master无密码登录所有slave原理一样,就是把slave的公钥追加到master的.ssh文件夹下的authorized_keys中,记得是追加(>>)。

思想:分别在其他几台slave机上使用scp命令,将slave上的公钥发到master上去,然后每发送一个,在master上,使用cat命令将slave的公钥添加到master的授权文件中。然后把传过来的公钥文件删除。

比如我这里的slave1机发送公钥到master机:

[root@slave1 ~]#scp

~/.ssh/id_rsa.pub hadoop@10.1.34.68:~/

[if !vml]

[endif]

然后master机上,将slave1的公钥添加到master的授权文件中:

[root@master .ssh]#cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

[if !vml]

[endif]

到此,配置已完成。验证一下ssh可以master和slave之间的无密码相互登陆

[if !vml]

[endif]


安装NTP服务(所有节点)

集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。具体思路如下:

1.master节点作为ntp服务器与外界对时中心同步时间,随后对所有datanode节点提供时间同步服务。

2.所有datanode节点以master节点为基础同步时间。

所有节点安装相关组件:ntp与ntpdate。

查看当前系统是否已安装ntp:

[root@master ~]#rpm

-qa | grep ntp

[if !vml]

[endif]

如果当前系统没有安装ntp,则安装:

yum -y install ntp ntpdate

或者下载安装ntpd的稳定版本。比如ntp-4.2.6p3.

wgethttp://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p3.tar.gz

tar zxf ntp-4.2.6p3.tar.gz

mkdir /app/ntp

cd ntp-4.2.6p3

./configure --prefix=/app/ntp --enable-all-clocks--enable-parse-clocks

make clean && make check && make

&& make intall

(注意:/app/ntp为ntpd的安装后文件路径)


完成后,配置开机启动。

[root@master ~]#chkconfig

ntpd on

[root@master ~]#chkconfig

--list ntpd

[if !vml]

[endif]

其中2-5为on状态就代表成功。


配置内网NTP服务器(master节点)

在配置之前,先使用ntpdate手动同步一下时间,免得本机与对时中心时间差距太大,使得ntpd不能正常同步。这里选用65.55.56.206作为对时中心。

[root@master ~]#ntpdate

-u 65.55.56.206

[if !vml]

[endif]

(注:在公司由于网络受限,导致对时失败,可以先不用管)

ntp服务只有一个配置文件,配置好了就OK。这里只给出有用的配置,不需要的配置都用#注掉,这里就不再给出:

[root@master ~]#vim

/etc/ntp.conf

driftfile /var/lib/ntp/drift

restrict 127.0.0.1

restrict -6 ::1

restrict default nomodify notrap

server 65.55.56.206 prefer

server 127.127.1.0   # local clock

fudge 127.127.1.0 stratum 10

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

[if !vml]

[endif]

配置文件完成,保存退出,启动服务,执行如下命令:

service ntpd start

chkconfig ntpd on (设置开机启动)

一般等待5-10分钟才能同步


配置NTP客户端(所有slave节点)

[root@slave1 ~]#vim

/etc/ntp.conf

driftfile /var/lib/ntp/drift

restrict 127.0.0.1

restrict -6 ::1

restrict default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

server 10.1.34.59

includefile /etc/ntp/crypto/pw

keys /etc/ntp/keys

[if !vml]

[endif]

保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:

[root@slave1 ~]#ntpdate

-u 10.1.34.59

[if !vml]

[endif]

(注:这里可能出现同步失败的情况,请不要着急,一般是本地的ntp服务器还没有正常启动,一般需要等待5-10分钟才可以正常同步。启动服务:

service ntpd start

chkconfig ntpd on)


附:其他可能用到的ntp设置

/etc/ntp.conf配置文件中,还可以设置其他属性,以更好的完成时间同步任务:

#允许内网其他机器同步时间

restrict 192.168.1.0 mask 255.255.255.0 nomodify

notrap

#中国这边最活跃的时间服务器: http://www.pool.ntp.org/zone/cn

server 210.72.145.44 perfer   #中国国家受时中心

server 202.112.10.36        #1.cn.pool.ntp.org

server 59.124.196.83        #0.asia.pool.ntp.org

#允许上层时间服务器主动修改本机时间

restrict 210.72.145.44 nomodify notrap noquery

restrict 202.112.10.36 nomodify notrap noquery

restrict 59.124.196.83 nomodify notrap noquery

#外部时间服务器不可用时,以本地时间作为时间服务

server 127.127.1.0    # local clock

fudge 127.127.1.0 stratum 10


安装配置(master节点)

检查系统是否已安装MySQL

先检查系统是否已经安装了MySQL,运行命令

[root@master ~]#rpm

-qa | grep -i mysql

如果安装了MySQL,就会有提示,有的系统没有安装MySQL数据库,但可能安装了MySQL的库文件,类似于mysql-libc-XXX,这个也要卸载。

卸载命令rpm -e --nodeps mysql-xxx

卸载完成后,运行 rpm -qa | grep mysql 查看是否卸载完全。

[if !vml]

[endif]

安装MySQL

(以下安装步骤适用于MySQL5.7.17版本,若要安装5.6.34等版本,请参考博客:

CentOS6.4离线安装mysql5.6.22

http://www.voidcn.com/blog/q383965374/article/p-6299314.html


卸载完成后,上传MySQL安装包到hadoop的master服务器的某路径下,比如我这里上传到了:/home/hadoop/mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar

解压缩tar包:

[root@master hadoop]#tar -xvf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar

[if !vml]

[endif]

依次序执行安装操作:(注意:是依次执行,不要乱了顺序,因为它们之间有依赖关系)

[root@master hadoop]#rpm -ivh mysql-community-common-5.7.17-1.el6.x86_64.rpm

[root@master hadoop]#rpm -ivh mysql-community-libs-5.7.17-1.el6.x86_64.rpm

[root@master hadoop]#rpm -ivh mysql-community-client-5.7.17-1.el6.x86_64.rpm

[root@master hadoop]#rpm -ivh mysql-community-server-5.7.17-1.el6.x86_64.rpm

[if !vml]

[endif]

以上安装操作完成,启动MySQL

[root@master hadoop]#service mysqld start


(注:若是安装5.6.34版本,安装顺序如下:

MySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm

MySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivh  MySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivh  MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivh   MySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivh  MySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm  

rpm -ivh  MySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm


修改密码

启动后在/var/log/mysqld.log中获取root账户的初始密码

[root@master hadoop]#vim /var/log/mysqld.log

[if !vml]

[endif]

(注:可通过

#grep

"password" /var/log/mysqld.log命令获取MySQL的临时密码)

连接MySQL数据库:

[root@master hadoop]#mysql -u root -p

[if !vml]

[endif]

修改数据库root用户的密码:

mysql>alter

user 'root'@'localhost' identified by '123456';

[if !vml]

[endif]

MySQL对用户密码安全性有所加强,所以设置的密码必须包含有数字,大写字母,小写字母,特殊符号,如果你设置的密码过于简单,会提示:

ERROR 1819 (HY000): Your password does not satisfy the currentpolicy requirements

修改密码后,刷新:

mysql>flush

privileges;

(注:若想使用简单密码,修改方法见附录)


设置MySQL远程连接

查看MySQL的用户:

mysql>selecthost, user from mysql.user;

设置允许所有地址访问:

mysql>update mysql.user

set host="%" where user="root";

mysql>flush

privileges;

关闭防火墙或设置3306端口允许访问:

要访问3306可以用两种方式,一个就是让防火墙开放3306端口,另一个是关闭防火墙。推荐使用开放3306端口

1. 开放3306端口

方法1:

[root@master hadoop]#iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT

[root@master hadoop]#iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT

对应阻止3306端口的命令为:

[root@master hadoop]#iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP

[root@master hadoop]#iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP

保存设置:

[root@master hadoop]#/etc/rc.d/init.d/iptables save

方法2:

修改/etc/sysconfig/iptables文件,增加如下一行:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport3306 -j ACCEPT

然后重启防火墙:

[root@master hadoop]#service iptables restart

1. 关闭防火墙

重启后生效:

[root@master hadoop]#chkconfig iptables off

即时成效,但重启后会再次启动:

[root@master hadoop]#service iptables stop

至此,应该可以远程连接MySQL了。


设置MySQL不区分大小写

Linux下的MySQL安装完之后默认是区分表名的大小写,不区分列名的大小写。

改变表名大小写区分规则的方法:

root账户登录,在/etc/my.cnf或/etc/mysql/my.cnf中的[mysqld]后添加lower_case_table_names=1,重启MySQL服务。

[if !vml]

[endif]

重启MySQL服务:

[root@master ~]#service

mysqld restart

[if !vml]

[endif]

(注:如果在/etc或/etc/mysql找不到my.cnf文件,需要从其他地方拷贝过来,因为使用rpm安装MySQL时,需要手工拷贝my.cnf文件。操作如下:

到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf:

[root@master mysql]#cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

my-small.cnf是为小型数据库设计的,不应该把这个模型用于含有一些常用项目的数据库

my-medium.cnf是为中等规模的数据库而设计的

my-large.cnf是为专用于一个SQL数据库的计算机而设计的

my-huge.cnf是为企业中的数据库而设计的

拷贝完成后,进入etc目录下,编辑my.cnf


修改MySQL默认编码

MySQL数据库的默认编码并不是utf-8,启动服务并登陆MySQL,可以查看MySQL数据库的编码

mysql>show

variables like '%char%';

[if !vml]

[endif]

由上图可知,database和server的字符集使用了latin1编码方式,不支持中文,即存储中文时会出现乱码。一下修改为utf-8编码:

关闭MySQL服务:

[root@master mysql]#service mysqld stop

[if !vml]

[endif]

打开my.cnf,在文件内的[mysqld]下增加如下两行设置,并保存退出

character_set_server=utf8

init_connect=’SET NAMES utf8’

[if !vml]

[endif]

重启MySQL服务

[root@master mysql]#service mysqld start

登陆MySQL后,可以看到,编码方式已经修改为utf8

[if !vml]

[endif]


设置MySQL开机启动

[root@master ytfiles]#hkconfig mysqld on

c[if !vml]

[endif]


创建数据库

进入mysql命令行,创建以下数据库:

#hive

>create database hive DEFAULT CHARSET

utf8 COLLATE utf8_general_ci;

#activity monitor

>create database amon DEFAULT CHARSET

utf8 COLLATE utf8_general_ci;

#hue

>create database hue DEFAULT CHARSETutf8 COLLATE utf8_general_ci;

#activity oozie

>create database oozie DEFAULT CHARSET

utf8 COLLATE utf8_general_ci;

#Reports Manager

>create database reportsmanager DEFAULT

CHARSET utf8 COLLATE utf8_general_ci;

授权root用户在主节点拥有所有数据库的访问权限

>grant all privileges on *.* to

'root'@'master' identified by 'xxxx' with grant option;

>flush privileges;


安装Cloudera Manager ServerAgent

解压安装包至/opt默认目录

在master节点解压安装包至/opt默认目录

[root@master tmp]#tar

-zxvf cloudera-manager-el6-cm5.10.1_x86_64.tar.gz -C /opt


Cloudera Manager 5建立数据库

将准备好的mysql-connector-java-5.1.33-bin.jar文件放到/opt/cm-5.10.1/share/cmf/lib/中。

并分别复制到:

/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/hive/lib/   (hive需要使用)

/opt/cloudera/parcels/CDH-5.10.1-1.cdh5.10.1.p0.10/lib/oozie/lib/   (oozie需要使用)

/var/lib/oozie/   (oozie需要使用)


[root@master tmp]#cp

mysql-connector-java-5.1.33.jar /opt/cm-5.10.1/share/cmf/lib/

在master节点初始化CM5的数据库

[root@master tmp]#/opt/cm-5.10.1/share/cmf/schema/scm_prepare_database.sh

mysql cm -hlocalhost -uroot -p123456 --scm-host localhost scm 123456 scm

note:在这里后面的参数分别是:数据库类型数据库名称数据库主机名数据库用户名密码 --scm-host cmserver主机名数据库用户名 数据库用户对应的密码 scm(未知参数,未查到用途,去掉也可以执行成功,暂且保留,与网上保持一致)


配置Agent

修改/opt/cm-5.10.1/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名master。

[root@master ~]#vim

/opt/cm-5.10.1/etc/cloudera-scm-agent/config.ini

[if !vml]

[endif]


同步Agent到所有slave节点

[root@master lib]#scp

-r /opt/cm-5.10.1/ root@slave3:/opt/


在所有节点创建cloudera-scm用户

[root@master lib]#useradd

--system --home=/opt/cm-5.10.1/run/cloudera-scm-server/ --no-create-home

--shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

[if !vml]

[endif]


准备Parcels,用以安装CDH5

将CHD5相关的Parcel包放到主节点的/opt/cloudera/parcel-repo/目录中

相关的文件如下:

CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel.sha1

CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel

manifest.json

最后将CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel.sha1,重命名为CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.10.1-1.cdh5.10.1.p0.10-el6.parcel文件。


执行启动脚本

在master节点启动服务端:

[root@master ~]#/opt/cm-5.10.1/etc/init.d/cloudera-scm-server

start

在所有节点启动Agent:

[root@slave1 ~]#/opt/cm-5.10.1/etc/init.d/cloudera-scm-agent

start

以上脚本是启动命令,相关停止或重启命令仅需将start变成stop或restart即可。

[if !vml]

[endif]


配置CDH集群

登录网页,安装CDH5

Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。

在浏览器打开http://master:7180进入CDH管理界面,由于CM

Server的启动需要花点时间,这里可能要等待一会才能访问,默认的用户名和密码均为admin。

[if !vml]

[endif]

以下选择安装的CM版本,选Express免费版或者Enterprise试用版都行。

[if !vml]

[endif]

[if !vml]

[endif]

选择安装的集群,这里注意只有已启动cloudera-scm-agent的主机才能被CM管理。

点击继续,各个Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,点继续。

[if !vml]

[endif]

接下来,出现以下包名,说明本地Parcel包配置无误,直接点继续就可以了

[if !vml]

[endif]


如果此处发现不到parcel包,就重启所有节点的agent服务,和master的server服务,然后重新尝试。并且确认CDH版本小于或者等于CM的版本

[if !vml]

[endif]

本地通过Parcel安装过程与本地通过Package安装过程完全一致,不同的是两者的本地源的配置。

区别如下:

Package本地源:软件包是.rpm格式的,数量通常较多,下载的时候比较麻烦。通过”createrepo .”的命令创建源,并要放到存放源文件主机的web服务器的根目录下,详见创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备

Parcel本地源:软件包是以.parcel结尾,相当于压缩包格式的,一个系统版本对应一个,下载的时候方便。如centos

6.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el6.parcel,而centos 5.x使用的CDH版本为CDH-X.X.X-1.cdhX.X.X.p0.22-el5.parcel。

这些文件放好之后,CM会获取这个包,并出现在主机->包裹的页面。出现的快慢跟你设置的包的刷新频率有关,默认是1小时。也可以重启CM服务和agent服务识别。

可以在管理页面的属性标签下的包裹种类里修改。


parcel安装,查看日志

[if !vml]

[endif]


正常情况下,内网网速速好的话10分钟左右激活完毕,最多不超过30分钟,如果卡住了,建议看看日志

安装过程中有什么问题,可以用

/opt/cm-5.10.1/etc/init.d/cloudera-scm-agentstatus

/opt/cm-5.10.1/etc/init.d/cloudera-scm-serverstatus

查看服务器客户端状态

也可以通过

/var/log/cloudera-scm-server/cloudera-scm-server.log

/var/log/cloudera-scm-agent/cloudera-scm-agent.log

查看日志

如果上面的路径找不到则在

日志文件夹"/opt/cm-5.10.1/log"查看日志,里面包含server和agent的log,使用命令如下:

tail -f/opt/cm-5.10.1/log/cloudera-scm-server/cloudera-scm-server.log

tail -f/opt/cm-5.10.1/log/cloudera-scm-agent/cloudera-scm-agent.log


成功激活后继续右下角点击继续

[if !vml]

[endif]


主机检查

会进入自动检查主机(耗时2分钟左右)然后给出报告,包括需要修改的部分和组件的版本

[if !vml]

[endif]


解决警告

这里有2个警告需要解决一下,至于版本里的不可用不适用不需要管。

警告一

Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera

Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响

解决方法

每台受影响的主机运行

echo 10 > /proc/sys/vm/swappiness 即可解决。

[if !vml]

[endif]

[root@master ~]#vim

/etc/sysctl.conf

[if !vml]

[endif]


警告二

已启用透明大页面压缩,可能会导致重大性能问题。请运行“echo

never > /sys/kernel/mm/transparent_hugepage/defrag”以禁用此设置,然后将同一命令添加到 /etc/rc.local 等初始脚本中,以便在系统重启时予以设置。以下主机将受到影响

解决方法

每台受影响的主机运行命令

[root@master ~]#echo

never > /sys/kernel/mm/transparent_hugepage/defrag

[root@master ~]#echo

never > /sys/kernel/mm/transparent_hugepage/enabled

[if !vml]

[endif]

并且

vim   /etc/rc.local 

加入

echo never >

/sys/kernel/mm/transparent_hugepage/defrag

echo never >

/sys/kernel/mm/transparent_hugepage/enabled

[if !vml]

[endif]

然后点击重新运行进行重新检查

[if !vml]

[endif]

[if !vml]

[endif]


全部绿勾了,然后点击右下角的完成。

选择安装哪些组件服务--这里根据需求选择即可。

[if !vml]

[endif]


右下角点击继续,然后配置角色。一般情况下保持默认就可以了(Cloudera

Manager会根据机器的配置自动进行配置,如果需要特殊调整,自行进行设置就可以了)。

我这里使用默认配置,所以直接点击继续就可以了。

[if !vml]

[endif]


配置数据库

然后配置数据库

这里需要输入自己的mysql的对应数据库名称和用户名以及密码。

我们之前在mysql中新建的数据名分布对应填入然后点击测试连接。

hive   root  123456

oozie  root  123456

hue    root  123456

[if !vml]

[endif]


如果测试连接全部是Successful,则点击右下角的继续。

[if !vml]

[endif]


参考博文

hadoop基础----hadoop实战(七)-----hadoop管理工具---使用Cloudera

Manager安装Hadoop---Cloudera

Manager和CDH5.8离线安装

http://www.voidcn.com/blog/q383965374/article/p-6326985.html


CDH5 Hadoop集群完全离线安装步骤总结

http://blog.csdn.net/it_taojingzhan/article/details/51537258


Centos7 CM5和CDH5(5.9.0) 离线安装

http://blog.csdn.net/myself_way/article/details/54864651


ERROR 1819 (HY000): Your password does not satisfy the currentpolicy requirements

http://www.cnblogs.com/ivictor/p/5142809.html




 

附录

CentOS7以下系统的防火墙操作

本机连接好着,远程连接不上telnet 192.168.1.561521

Linux自身的防火墙名为“iptables”

chkconfig命令只是查看和设置服务的自动启动情况,并不能反映当前服务的状态.

service iptables status

可以查看到iptables服务的当前状态

查看防火墙状态:

/etc/init.d/iptablesstatus

暂时关闭防火墙:

/etc/init.d/iptables stop

永久关闭防火墙:

chkconfig iptables off

开启防火墙:

/etc/init.d/iptablesstart

永久开启防火墙:

chkconfig iptableson


禁止防火墙在系统启动时启动:

/sbin/chkconfig --level2345 iptables off

重启iptables:

/etc/init.d/iptablesrestart


开放防火墙端口(1521、1158)

/sbin/iptables -I INPUT-p tcp --dport 1521 -j ACCEPT

/sbin/iptables -I INPUT-p tcp --dport 1158 -j ACCEPT

保存设置命令:

/etc/rc.d/init.d/iptablessave

查看端口打开情况命令:

/etc/init.d/iptablesstatus


CentOS7以上系统的防火墙操作

centos6的版本防火墙使用的iptables,iptables是一个静态防火墙,也就是说它不能够动态的添加开启端口,必须在配置文件中添加开启端口,然后重启防火墙才能生效。

centos7的防火墙使用的是firewalld,它是动态的,可以通过命令添加开启端口,不用重启服务就可以使改变生效。


启动:#systemctlstart  firewalld

查看状态:#systemctl

status firewalld或者firewall-cmd --state

停止:#systemctl

stop firewalld

禁用:#systemctl

disable firewalld


永久开启80端口:firewall-cmd --zone=public --add-port=80/tcp –permanent

说明:--add-port=80/tcp  #添加端口,格式为:端口/通讯协议

--permanent   #永久生效,没有此参数重启后失效

更新防火墙规则:#firewall-cmd

--reload

                #firewall-cmd

--complete-reload

两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务


CentOS7以上系统修改主机名

第一种:hostname 主机名

hostname 主机名称

这种方式,只能修改临时的主机名,当重启机器后,主机名称又变回来了。


第二种:hostnamectl set-hostname

hostnamectl set-hostname 主机名

使用这种方式修改,可以永久性的修改主机名称!


MySQL5.6.34相关操作

(参考博文:)

安装MySQL5.6.34的执行顺序:

rpm -ivhMySQL-server-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivhMySQL-client-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivhMySQL-shared-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivh MySQL-devel-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivhMySQL-shared-compat-5.6.34-1.linux_glibc2.5.x86_64.rpm

rpm -ivhMySQL-embedded-5.6.34-1.linux_glibc2.5.x86_64.rpm  

rpm -ivhMySQL-test-5.6.34-1.linux_glibc2.5.x86_64.rpm

[if !vml]

[endif]

安装完成后,查看生成的临时随机密码:

[root@master ytfiles]#vim /root/.mysql_secret

[if !vml]

[endif]

启动MySQL服务:

[root@master ytfiles]#service mysql start

[if !vml]

[endif]

登录MySQL:

[root@master ytfiles]#mysql -u root -p

[if !vml]

[endif]

修改MySQL初始密码:

mysql> set password for 'root'@'localhost'=password('123456');

[if !vml]

[endif]


找到my.cnf配置文件

如果"/etc/"目录下没有my.cnf配置文件,请到"/usr/share/mysql/"下找到my-default.cnf文件,拷贝其中一个合适的配置文件到"/etc/"并改名为"my.cnf"中。命令如下:

cp /usr/share/mysql/my- default.cnf /etc/my.cnf


编辑MySQL的配置文件"/etc/my.cnf"为保证MySQL能够正常工作,需要指明"mysql.sock"文件的产生位置,以及默认编码修改为UTF-8。用下面命令:

vim /etc /my.cnf

[mysqld] #下添加以下命令

socket = /var/lib/mysql/mysql/mysql.sock

datadir=/mysql_data/mysql   #如果你的数据存储位置要改变的话需要在这里指定存储目录

character-set-server=utf8

lower_case_table_names=1

[if !vml]

[endif]

#(注意linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;#  lower_case_table_names =0    0:区分大小写,1:不区分大小写)

注意:

1)还有在此配置文件还有[client]的一项配置,其中也可以设置socket,datadir两个选项

2)如果你修改了数据的存储位置目录,则需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,修改 datadir=/mysql_data/mysql。

vim /etc/rc.d/init.d/mysql


问题:有时候发现设置的my.cnf值没生效:

了解一下mysql配置文件的加载顺序:

$ mysqld --help --verbose|grep -A1 -B1 cnf

Default options are read from the following files in the givenorder:

/etc/my.cnf/etc/mysql/my.cnf/usr/my.cnf

~/.my.cnf

mysql按照上面的顺序加载配置文件,后面的配置项会覆盖前面的。把/usr/my.cnf这个文件删掉,/etc/my.cnf里面的就生效了。

[root@master usr]#mv

my.cnf my.cnf.bak

[if !vml]

[endif]



错误:

MySQL> update user set host='%' where user =

'root';ERROR 1062 (23000):

Duplicate entry '%-root' for key 'PRIMARY'然后查看了下数据库的host信息如下:MySQL> select host from user where user =

'root';+-----------------------+| host |+-----------------------+| % || 127.0.0.1 || localhost.localdomain |+-----------------------+3 rows in set (0.00 sec)host已经有了%这个值,所以直接运行命令:复制代码 代码如下:MySQL>flush privileges;再用MySQL

administrator连接...成功!!




MySQL5.7修改简单密码

MySQL对用户密码安全性有所加强,所以设置的密码必须包含有数字,大写字母,小写字母,特殊符号,如果你设置的密码过于简单,会提示:

ERROR 1819 (HY000): Your password does not satisfy the currentpolicy requirements


这个其实与validate_password_policy的值有关。

validate_password_policy有以下取值:

PolicyTests Performed

0 or LOWLength

1 or MEDIUMLength; numeric,  lowercase/uppercase, and special characters

2 or STRONGLength; numeric,  lowercase/uppercase, and special characters; dictionary file

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。

必须修改两个全局参数:

首先,修改validate_password_policy参数的值

mysql> set global validate_password_policy=0;

Query OK, 0 rows affected (0.00sec)

这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。

[if !vml][endif]

mysql> select @@validate_password_length;

+----------------------------+

| @@validate_password_length |

+----------------------------+

|                          8 |

+----------------------------+

1 row in set (0.00sec)

[if !vml][endif]

validate_password_length参数默认为8,它有最小值的限制,最小值为:

validate_password_number_count

+validate_password_special_char_count

+ (2 *validate_password_mixed_case_count)

其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。

这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。如下所示:

[if !vml][endif]

mysql> select @@validate_password_length;

+----------------------------+

| @@validate_password_length |

+----------------------------+

|                          8 |

+----------------------------+

1 row in set (0.00sec)


mysql> set global validate_password_length=1;

Query OK, 0 rows affected (0.00sec)


mysql> select @@validate_password_length;

+----------------------------+

| @@validate_password_length |

+----------------------------+

|                          4 |

+----------------------------+

1 row in set (0.00sec)

[if !vml][endif]

如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。

[if !vml][endif]

mysql> select @@validate_password_length;

+----------------------------+

| @@validate_password_length |

+----------------------------+

|                          4 |

+----------------------------+

1 row in set (0.00sec)


mysql> select @@validate_password_mixed_case_count;

+--------------------------------------+

| @@validate_password_mixed_case_count |

+--------------------------------------+

|                                    1 |

+--------------------------------------+

1 row in set (0.00sec)


mysql> set global validate_password_mixed_case_count=2;

Query OK, 0 rows affected (0.00sec)


mysql> select @@validate_password_mixed_case_count;

+--------------------------------------+

| @@validate_password_mixed_case_count |

+--------------------------------------+

|                                    2 |

+--------------------------------------+

1 row in set (0.00sec)


mysql> select @@validate_password_length;

+----------------------------+

| @@validate_password_length |

+----------------------------+

|                          6 |

+----------------------------+

1 row in set (0.00sec)

[if !vml][endif]

当然,前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。

那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。

[if !vml][endif]

mysql> SHOW VARIABLES LIKE 'validate_password%';

+--------------------------------------+-------+

|Variable_name                        | Value |

+--------------------------------------+-------+

|validate_password_dictionary_file    |       |

|validate_password_length             | 6    |

|validate_password_mixed_case_count   | 2    |

|validate_password_number_count       | 1    |

|validate_password_policy             |LOW   |

| validate_password_special_char_count | 1     |

+--------------------------------------+-------+

6 rows in set (0.00sec)

(注:出自博客:http://www.cnblogs.com/ivictor/p/5142809.html)


Linux系统备份与还原

Linux不像windows,它不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中。

使用root用户切换到根目录

[root@master ~]#cd

/

然后,创建backup文件夹,用以存放备份的系统压缩包:

[root@master /]#mkdir

backup

然后,使用下面的命令备份完整的系统:

[root@master /]#tar

cvpzf /backup/backup_full.tar.gz --exclude=/proc --exclude=/lost+found

--exclude=/backup --exclude=/mnt --exclude=/sys /


说明:

tar 部分就是我们将要使用的软件。

'cvpfz'是我们给tar加的选项,像“创建一个压缩文档”(这是显然的),“保存权限”(以便使每一个相同的文件有相同的权限),以及“gzip”(缩减大小)。接下来,是压缩文档将获得的名称,在我们的例子中是backup.tgz。

紧随其后的是我们想要备份的根目录。既然我们想备份所有东西:/。接着就是我们要剔除的目录了:我们不想备份每一样东西,因为包括有些目录不是非常有用。同时确保你没有把备份文件本身也加进去了,否则,你会得到怪异的结果的。你也许同样不打算把/mnt文件夹包括进来——如果你在那儿挂载了其他分区——否则最终你会把那些也备份的。同时确保你没有任何东西挂载在 /media(即没有挂载任何cd或可移动介质)。否则,剔除/media。

在进程的最后,你也许会得到一条信息,写着“tar:由于先前错误的耽搁而存在错误”或者其他什么,不过大多数情况下你可以仅仅忽略它。

作为选择,你可以使用Bzip来压缩你的备份。这意味着较高的压缩比但是也意味着较低的速度。如果压缩比对你很重要,只需用“j”替换命令中的“z”,同时给备份命一个相应的扩展名。这些会使命令变成这样:

[root@master /]#tar cvpjf /backup/backup_full.tar.bz2

--exclude=/proc --exclude=/lost+found --exclude=/backup --exclude=/mnt

--exclude=/sys /


恢复:

如果系统被毁坏,那么我们就可以用备份好的tar包进行恢复。

在分区的backup目录下的backup_full.tar.gz文件

[root@master /]#tar

xvpfz /backup/backup_full.tar.gz -C /

如果你使用 bz2:

[root@master /]#tar

xvpfj /backup/backup_full.tar.bz2 -C /

警告:这会把你分区里所有文件替换成压缩文档里的文件!

确保在你做其他任何事情之前,重新创建你剔除的目录:

[root@master /]#mkdir

proc

[root@master /]#mkdir

lost+found

[root@master /]#mkdir

mnt

[root@master /]#mkdir

sys

/proc 权限:文件所有者:root群组:root 所有者:读取执行群组:读取执行其它:读取执行

/lost+found 权限:文件所有者:root群组:root 所有者:读取写入执行群组:读取执行其它:读取执行

/mnt 权限:文件所有者:root群组:root 所有者:读取写入执行群组:读取执行其它:读取执行

/sys 权限:文件所有者:root群组:root 所有者:读取写入执行群组:读取执行其它:读取执行

当你重启以后,所以的事情都会和你备份的时候一模一样。

(注:参考博客:http://www.centoscn.com/image-text/2013/0418/318.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345