Ubuntu 14.10 下ZooKeeper+Hadoop2.6.0+HBase1.0.0 的HA机群高可用配置

时间:2023-02-25 13:59:38

1 硬件环境

Ubuntu 14.10 64位

2 软件环境

openjdk-7-jdk

hadoop 2.6.0

zookeeper-3.4.6

hbase-1.0.0

3 机群规划

3.1 zookeeper配置-机器结点

192.168.1.100 1421-0000
192.168.1.106 1421-0003
192.168.1.107 1421-0004
192.168.1.108 1421-0005
192.168.1.109 1421-0006

3.2 hadoop配置-机器结点

192.168.1.100 1421-0000 DN节点,Journal节点,zookeeper节点
192.168.1.101 1421-0001 备NN,DN节点
192.168.1.102 1421-0002 主NN
192.168.1.103 1423-0001 DN节点,主RM
192.168.1.104 1423-0002 DN节点,备RM
192.168.1.105 1423-0003 DN节点,JobHistory
192.168.1.106 1421-0003 DN节点,Journal节点,zookeeper节点
192.168.1.107 1421-0004 DN节点,Journal节点,zookeeper节点
192.168.1.108 1421-0005 DN节点,Journal节点,zookeeper节点
192.168.1.109 1421-0006 DN节点,Journal节点,zookeeper节点

说明:

1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态

2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调

4 集群配置

机群的安装步骤大概如下:1 JDK配置;2 SSH免密码登录设置;3 ZooKeeper配置;4 Hadoop配置;5 HBase配置

4.1 Hadoop编译与基本配置

下载Hadoop稳定版,然后用mvn进行编译

mvn package -Pdist,native -DskipTests –Dtar

即可在其目录下:/hadoop-dist/target 就可以找到编译好的 hadoop 了。编译 过程需要 jdk,maven,protobuf 和 cmake 为基础。

SSH 也可通过 apt 进行下载,在生成 key 的时候指定密码为空,其他用回车跳过设置为默认即可,在 home 下的用户目录下,找到.ssh 文件夹,通过创建
文件夹 authorized_keys,主要 Shell 命令如下:
ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
其中 id_rsa.pub 位于.ssh 文件夹下,为 ssh 公钥,添加为信任方后,即可完成免密码登陆操作。

4.2 ZooKeeper配置

ZooKeeper的配置文件在conf中,名为zoo.conf,主要配置的内容位其log和data的磁盘路径,以及各个节点的基础信息。它本身提供了一个zoo_sample.cfg,我们将他复制一份,命名为

zoo.cfg,然后在其中添加一些配置,下面之列出新增的部分。

dataDir=/home/hadoop/software/cloud/zookeeper-3.4.6/zoodata
dataLogDir=/home/hadoop/software/cloud/zookeeper-3.4.6/zoolog server.0=1421-0000:2888:3888
server.1=1421-0003:2888:3888
server.2=1421-0004:2888:3888
server.3=1421-0005:2888:3888
server.4=1421-0006:2888:3888

接下来需要在每个dataDir目录下新建myid文件,每个文件中输入响应的server.后面的数字,例如在1421-0000中的myid输入0.在各个目录下做相同处理,同时还要在每个文件夹建立dataDir和dataLogDir文件夹,这样ZooKeeper配置完毕  

4.3 Hadoop配置

4.3.1 将hadoop_home添加到系统环境变量中

4.3.2 配置hadoop-env.sh,添加JAVA_HOME

export JAVA_HOME=/usr/lib/jvm/java-1.7.-openjdk-amd64

4.3.3 配置core-site.xml,主要配置ha.zookeeper.quorum等

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-cluster</value>
</property> <property>
<name>ha.zookeeper.quorum</name>
<value>-:,-:,-:,-:,-:</value>
</property> <property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./tmp</value>
<description>
adoop的临时目录,其它目录会基于此路径。本地目录。只可以设置一个值;建议设置到一个足够空间的地方,而不是默认的/tmp下,服务端参数,修改需重启。本地路径
</description>
</property>
</configuration>

4.3.4 配置hdfs-site.xml,主要配置 dfs.nameservices、hdfs HA 特性、hdfs 副本数和 hdfs的 name 与 data 文件的磁盘存放位置,以及 SSH 文件夹位置。

<configuration>

    <property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
<description>指定命名空间名称,可随易取</description>
</property> <property>
<name>dfs.ha.namenodes.hadoop-cluster</name>
<value>nn1,nn2</value>
<description>在命名空间下指定NameNode逻辑名</description>
</property> <property>
<name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.http-address.hadoop-cluster.nn1</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.http-address.hadoop-cluster.nn2</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.servicerpc-address.hadoop-cluster.nn1</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.namenode.servicerpc-address.hadoop-cluster.nn2</name>
<value>-:</value>
<description></description>
</property> <property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
<description></description>
</property> <property>
<name>dfs.client.failover.proxy.provider.hadoop-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>出现故障,哪个实现类负责执行故障切换</description>
</property> <property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<description>一旦NameNode切换,使用ssh方式进行操作</description>
</property> <property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
<description>如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 </description>
</property> <property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value></value>
<description>ssh连接超时的最大时间</description>
</property> <property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./hdfs/journal</value>
<description>配置项用于设置journalnode节点保存本地状态的目录。本地路径</description>
</property> <property>
<name>dfs.replication</name>
<value></value>
<description>数据备份数目</description>
</property> <property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://-:;-:;-:;-:;-:/hadoop-journal</value>
<description>这是NameNode读写JNs组的uri。通过这个uri,NameNodes可以读写edit log内容。hadoop-journal指journalnode设置的“dfs.journalnode.edits.dir”下的本地路径</description>
</property> <property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./hdfs/name</value>
<description>本地磁盘目录,NN存储fsimage文件的地方。可以是按逗号分隔的目录列表,fsimage文件会存储在全部目录,冗余安全。这里多个目录设定,最好在多个磁盘,另外,如果其中一个磁盘故障,不会导致系统故障,会跳过坏磁盘。由于使用了HA,建议仅设置一个。本地路径</description>
</property> <property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./hdfs/data</value>
<description>本地磁盘目录,HDFS数据应该存储Block的地方。可以是逗号分隔的目录列表(典型的,每个目录在不同的磁盘)。这些目录被轮流使用,一个块存储在这个目录,下一个块存储在下一个目录,依次循环。每个块在同一个机器上仅存储一份。不存在的目录被忽略。必须创建文件夹,否则被视为不存在。本地路径</description>
</property>
</configuration>

4.3.5 mapred-site.xml配置:

该文档主要配置 MapReduce 的计算框架类型和 Job 日志记录节点内容与保存路径即可,如需对 MapReduce 过程资源分配调优,则可以配置其 mapreduce.map.memory.mb、mapreduce.map.cpu.vcores、mapreduce.map.java.opts 等等,即对其 MapReduce 具体的每项流程进行资源配置,Map、Shuffle 和 Reduce 各占用的内存与 CPU 核数,是否压缩数据传递,在 Map 的到达百分之几时开始进行 Reduce 操作,并行数与 Shuffle 占 Reduce内存中的百分比等等

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property> <property>
<name>mapreduce.map.output.compress</name>
<value>true</value>
</property> <property>
<name>mapreduce.reduce.shuffle.merge.percent</name>
<value>0.66</value>
</property> <property>
<name>mapreduce.jobhistory.address</name>
<value>-:</value>
</property> <property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>-:</value>
</property> <property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/hadoop/mr_history/tmp</value>
<description>
参数解释:MapReduce作业产生的日志存放位置。HDFS路径
</description>
</property> <property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/hadoop/mr_history/done</value>
<description>
参数解释:MR JobHistory Server管理的日志的存放位置。HDFS路径
</description>
</property>
</configuration>

4.3.6 yarn-site.xml:这里采用ResourceManager HA配置

<configuration>

        <!-- configeration for ResourceManger-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>-</value>
</property> <!-- configeration for NodeManager-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> <property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property> <property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value></value>
</property> <property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./yarn/local</value>
<description>
数据写入本地文件系统路径的列表用逗号分隔,多条存储路径可以提高磁盘的读写速度
</description>
</property> <property>
<name>yarn.nodemanager.log-dirs</name>
<value>/home/hadoop/software/cloud/hadoop-2.6./yarn/log</value>
<description>
本地文件系统日志路径的列表逗号分隔,多条存储路径可以提高磁盘的读写速度
</description>
</property> <!-- HA 配置 =============================================================== -->
<!-- Resource Manager Configs -->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value></value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
<value>true</value>
</property>
<!-- 集群名称,确保HA选举时对应的集群 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-cluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 这里RM主备结点需要单独指定,(可选)
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm2</value>
</property>
-->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value></value>
</property>
<!-- ZKRMStateStore 配置 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>-:,-:,-:,-:,-:</value>
</property>
<property>
<name>yarn.resourcemanager.zk.state-store.address</name>
<value>-:,-:,-:,-:,-:</value>
</property>
<!-- Client访问RM的RPC地址 (applications manager interface) -->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>-:</value>
</property>
<!-- AM访问RM的RPC地址(scheduler interface) -->
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>-:</value>
</property>
<!-- RM admin interface -->
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>-:</value>
</property>
<!--NM访问RM的RPC端口 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>-:</value>
</property>
<!-- RM web application 地址 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
<value>-:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
<value>-:</value>
</property>
</configuration>

4.3.7 配置slaves

-

-
-
- -
-
-
-

4.3.8 配置masters

1421-0001

4.3.9 创建需要的目录

/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/data  

/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/name

/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/journal

/home/hadoop/software/cloud/hadoop-2.6.0/tmp

/home/hadoop/software/cloud/hadoop-2.6.0/yarn/local

/home/hadoop/software/cloud/hadoop-2.6.0/yarn/log

5 启动机群

5.1 第一次启动

5.1.1 启动ZK:

在所有的 ZK 节点执行命令:zkServer.sh start,查看各个 ZK 的从属关系:zkServer.sh status 结果为 Mode: follower or leader,注意:哪个 ZK 节点会成为 leader 默认是通过 ZK 快速选举诞生的,这里就不介绍其快速选举的具体流程了。此时,在各个节点都可以查看到 ZK 进程,在 Shell 窗口下输入jps 即可,内容如下:

xxxx QuorumPeerMain
xxxx Jps

5.1.2 格式化ZK(仅第一次需要做)

任意 namenode 节点上执行:hdfs zkfc –formatZK

5.1.3 启动 ZKFC:

ZookeeperFailoverController 是用来监控 NN 状态,协助实现主备 NN 切换的,所以仅仅在主备 NN 节点上启动就行:hadoop-daemon.sh start zkfc,启动后我们可以看到 ZKFC 进程:

xxxx Jps
xxxx DFSZKFailoverController

5.1.4 启动JournalNode

启动用于主备 NN 之间同步元数据信息的共享存储系统 JournalNode,参见角色分配表,在各个 JN 节点上启动:hadoop-daemon.sh start journalnode,启动后在各个 JN 节点都可以看到 JournalNode 进程:

xxxx QuorumPeerMain
xxxx Jps
xxxx JournalNode

5.1.5 格式化并启动NN

格式化:hdfs namenode –format hadoop-cluster,注意:只有第一次启动系统时需格式化,请勿重复格式化。在主 NN 节点执行命令启动 NN:hadoop-daemon.sh start namenode

启动后可以看到 NN 进程:
xxxx Jps
xxxx NameNode
xxxx DFSZKFailoverController

5.1.6 在备 NN 上同步主 NN 的元数据信息:

hdfs namenode –bootstrapStandby,正常执行时的最后部分日志中,INFO util.ExitUtil: Exiting with status 后的数字为0 则是正常退出,即正常启动。而如果为其他数字,则需要到 hadoop 安装目录下的 log 中查询 namenode 启动失败的原因,根据其描述进行解决。

5.1.7 启动备 NN,在备 NN 上执行命令:hadoop-daemon.sh start namenode

5.1.8 设置主 NN

(这一步可以省略,这是在设置手动切换 NN 时的步骤,ZK 已经自动选择一个节点作为主 NN 了,如果两个节点都是Standby,那么可以用下面的命令设置主NN,但是因为是自动切换的,所以两个都是standby说明机群有问题)

hdfs haadmin -transitionToActive nn1

5.1.9 在主 NN 上启动 Datanode,在[nn1]上,启动所有 datanode:hadoop-daemons.sh start datanode

5.1.10 启动yarn:

因为namenode和resourcemanger都要战勇很大量资源,所以把他俩分开部署。首先在1423-0001启动yarn:start-yarn.sh,在备机启动RM:yarn-daemon.sh start resourcemanager

5.1.11 在运行 MRJS 的  1423-003上执行以下命令启动 MR JobHistory Server:mr-jobhistory-daemon.sh start historyserver

5.2 整个集群的启动与关闭

在之后如果没有特殊原因,可以通过命令 start-all.sh 和 stop-all.sh 分别启动或关闭整个 Hadoop 集群。

5.3 测试Wordcount

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount /hadoop/input/zookeeper.out /hadoop/output/wordcount

6 HBase配置

6.1 配置hbase-env.sh

export JAVA_HOME=/usr/lib/jvm/java-1.7.-openjdk-amd64
export HBASE_MANAGES_ZK=false

6.2 配置hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://1421-0002:9000/hbase</value>
<description></description>
</property> <property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description></description>
</property> <property>
<name>hbase.master</name>
<value>1421-0002:6000</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.quorum</name>
<value>1421-0000,1421-0003,1421-0004,1421-0005,1421-0006</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/software/cloud/zookeeper-3.4.6/zoodata</value>
<description></description>
</property> <property>
<name>hbase.zookeeper.property.logDir</name>
<value>/home/hadoop/software/cloud/zookeeper-3.4.6/zoolog</value>
<description></description>
</property> </configuration>

6.3 配置regionservers:这里将所有的DN作为regionservers

1421-0000
1421-0001 1423-0001
1423-0002
1423-0003 1421-0003
1421-0004
1421-0005
1421-0006

6.4 启动

Hbase 的启动非常简单,只需要在主节点上输入 start-hbase.sh 即可启动HMaster 与 HRegionServer 守护进程。

7 常见问题

7.1 在我修改了整个机群的机器名和hadoop,zookeeper配置后,在启动hadoop,发现两个namenode都是standby,之前都是好好的,但是又一次启动之后发现两个NN都是standby,那么只能手动切换了,但是手动切换后刚开始是好的,但是过了一小会就海变成了standby,后来看日志发现可能是因为修改了机器名,但是没有重新格式化,导致了文件中主机名不一致,其中有一个错误是关于ZK中edit的,然后只能重新格式化NN,格式化完就好了,但是数据没备份,没了。。

hdfs haadmin -transitionToActive --forcemanual nn1

附上一些实用命令

执行命令“hdfs  haadmin”,会显示子命令列表,如下

Usage: DFSHAAdmin [-ns <nameserviceId>]
[-transitionToActive <serviceId>]
[-transitionToStandby <serviceId>]
[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
[-getServiceState <serviceId>]
[-checkHealth <serviceId>]
[-help <command>]
如果要查看具体用法,使用“hdfs  haadmin  -help  <command>”。其中,
transitionToActivetransitionToStandby是用于在不同状态之间切换的。这些命令没有任何防护错误,很少使用。
failover 初始化一个故障恢复。该命令会从一个失效的NameNode切换到另一个上面。
getServiceState 获取当前NameNode的状态。
checkHealth 检查NameNode的状态。正常就返回0,否则返回非0值。 

Ubuntu 14.10 下ZooKeeper+Hadoop2.6.0+HBase1.0.0 的HA机群高可用配置的更多相关文章

  1. Ubuntu 14&period;10 下编译Hadoop2&period;4&period;0

    在http://www.aboutyun.com/thread-8130-1-1.html 这里看到到,安装过程遇到了上面说的问题,所以将此文转载过来,以备不时之需,感谢此作者. 问题导读: 1.如果 ...

  2. Ubuntu 14&period;10 下安装伪分布式hdoop 2&period;5&period;0

    折腾了一天,其间配置SSH时候出现了问题,误删了ssh-keygen相关文件,导致配置SSH彻底萎了,又重装了系统.... 采用伪分布式模式,即hadoop将所有进程运行于同一台主机上,但此时Hado ...

  3. Ubuntu 14&period;10下基于Nginx搭建mp4&sol;flv流媒体服务器&lpar;可随意拖动&rpar;并支持RTMP&sol;HLS协议&lpar;含转码工具&rpar;

    Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...

  4. Ubuntu 14&period;10 下安装Ganglia监控集群

    关于 Ganglia 软件,Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格.它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数 ...

  5. Ubuntu 14&period;10 下Hive配置

    1 系统环境 Ubuntu 14.10 JDK-7 Hadoop 2.6.0 2 安装步骤 2.1 下载Hive 我第一次安装的时候,下载的是Hive-1.2.1,配置好之后,总是报错 [ERROR] ...

  6. Ubuntu 14&period;10 下安装java反编译工具 jd-gui

    系统环境,Ubuntu 14.10 ,64位 1 下载JD-GUI,网址http://221.3.153.126/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/jd.benow.ca/ ...

  7. Ubuntu 14&period;10 下DokuWiki安装

    环境说明: Ubuntu 14.10 64位 1 下载DokuWiki:http://download.dokuwiki.org/ 2 解压到 /var/www/html下面 3 如果没有安装Apac ...

  8. Ubuntu 14&period;10 下awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. Ubuntu 14&period;10 下Server版本中文乱码问题

    在安装Ubuntu server 14.10 时候选择了中文版,但是装好系统发现,里面的中文有乱码,解决办法 打开 /etc/default/locale sudo nano /etc/default ...

随机推荐

  1. 《BI项目笔记》创建父子维度

    创建步骤: 而ParentOriginID其实就是对应的ParentOriginID,它的 Usage 必须是 Parent 才能表示这样的一个父子维度. 查看OriginID属性, Usage 是 ...

  2. &lbrack;CareerCup&rsqb; 11&period;7 Tower of People in Circus 马戏团的人塔

    11.7 A circus is designing a tower routine consisting of people standing atop one another's shoulder ...

  3. 应中DOS中断显示字符串(摘自《汇编语言》王爽)

    data segment s1 db 'Good,better,best,$' s2 db 'Never let it rest,$' s3 db 'Till good is better,$' s4 ...

  4. Unity3d集成移动MM SDK 2&period;2的技术要点(坑爹的MM SDK)

    原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140423517951/ U3D集成移动MM的SDK绝对是以坑爹为主的东西. 浪 ...

  5. graylog2 架构--转载

    原文地址:http://docs.graylog.org/en/latest/pages/architecture.html Architectural considerations There ar ...

  6. Ubuntu环境下NFS服务器搭建

    看到鸟哥私房菜对NFS的介绍,就想试试玩一下.看起来步骤也很简单. 1.背景名词. NFS(Network File System) 作用:让所有的Unix-like 机器通过网络共享彼此的文件 局限 ...

  7. 二分图最大匹配 Hopcroft-Karp算法模板

    #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> ...

  8. Docker Compose容器编排

    Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...

  9. Scikit-learn:数据预处理Preprocessing data

    http://blog.csdn.net/pipisorry/article/details/52247679 本blog内容有标准化.数据最大最小缩放处理.正则化.特征二值化和数据缺失值处理. 基础 ...

  10. 剑指offer 05:用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题代码 import java.util.Stack; public class Solution{ ...