<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mind2you | minder</title>
    <description>minder
</description>
    <link>http://mind2you.github.io/</link>
    <atom:link href="http://mind2you.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 22 Aug 2018 10:01:23 +0000</pubDate>
    <lastBuildDate>Wed, 22 Aug 2018 10:01:23 +0000</lastBuildDate>
    <generator>Jekyll v3.7.3</generator>
    
      <item>
        <title>Linux-Chrony</title>
        <description>&lt;h1 id=&quot;chrony&quot;&gt;Chrony&lt;/h1&gt;
&lt;p&gt;chrony CentOS 7 同步时间&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;情景&quot;&gt;情景&lt;/h2&gt;
&lt;p&gt;某LAN 内有 3 台机器，需要保持LAN内机器时间一致。&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	A-机器IP: 192.168.137.100
	B-机器IP: 192.168.137.101
	C-机器IP: 192.168.137.102
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;分析&quot;&gt;分析&lt;/h2&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;以 A-机器作为时间服务器，B-机器、C-机器 的时间与 A-机器 的时间同步即可。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;操作&quot;&gt;操作&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;修改 A 机器 /etc/chrony.conf 文件&lt;/p&gt;

    &lt;p&gt;添加：&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  server 192.168.137.100 iburst # NTP 服务器
  allow 192.168/16 	# 服务端允许连接的客户端网段
  local stratum 10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;如:&lt;/p&gt;
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;   [root@192 ~]# cat /etc/chrony.conf 
   # Use public servers from the pool.ntp.org project.
   # Please consider joining the pool (http://www.pool.ntp.org/join.html).
   #server 0.centos.pool.ntp.org iburst
   #server 1.centos.pool.ntp.org iburst
   #server 2.centos.pool.ntp.org iburst
   #server 3.centos.pool.ntp.org iburst
   server 192.168.137.100 iburst
     
   # Ignore stratum in source selection.
   stratumweight 0
     
   # Record the rate at which the system clock gains/losses time.
   driftfile /var/lib/chrony/drift
     
   # Enable kernel RTC synchronization.
   rtcsync
     
   # In first three updates step the system clock instead of slew
   # if the adjustment is larger than 10 seconds.
   makestep 10 3
     
   # Allow NTP client access from local network.
   allow 192.168/16
     
   # Listen for commands only on localhost.
   bindcmdaddress 127.0.0.1
   bindcmdaddress ::1
     
   # Serve time even if not synchronized to any NTP server.
   local stratum 10
     
   keyfile /etc/chrony.keys
     
   # Specify the key used as password for chronyc.
   commandkey 1
     
   # Generate command key if missing.
   generatecommandkey
     
   # Disable logging of client accesses.
   noclientlog
     
   # Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
   logchange 0.5
     
   logdir /var/log/chrony
   #log measurements statistics tracking
   [root@192 ~]# 

	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;修改 B、C 机器 /etc/chrony.conf 文件&lt;/p&gt;

    &lt;p&gt;添加：&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  server 192.168.137.100 iburst # NTP 服务器

  local stratum 10
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;

    &lt;p&gt;如:&lt;/p&gt;
    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  [root@192 ~]# cat /etc/chrony.conf 
  # Use public servers from the pool.ntp.org project.
  # Please consider joining the pool (http://www.pool.ntp.org/join.html).
  #server 0.centos.pool.ntp.org iburst
  #server 1.centos.pool.ntp.org iburst
  #server 2.centos.pool.ntp.org iburst
  #server 3.centos.pool.ntp.org iburst
  server 192.168.137.100 iburst
    
  # Ignore stratum in source selection.
  stratumweight 0
    
  # Record the rate at which the system clock gains/losses time.
  driftfile /var/lib/chrony/drift
    
  # Enable kernel RTC synchronization.
  rtcsync
    
  # In first three updates step the system clock instead of slew
  # if the adjustment is larger than 10 seconds.
  makestep 10 3
    
  # Allow NTP client access from local network.
  #allow 192.168/16
    
  # Listen for commands only on localhost.
  bindcmdaddress 127.0.0.1
  bindcmdaddress ::1
    
  # Serve time even if not synchronized to any NTP server.
  local stratum 10
    
  keyfile /etc/chrony.keys
    
  # Specify the key used as password for chronyc.
  commandkey 1
    
  # Generate command key if missing.
  generatecommandkey
    
  # Disable logging of client accesses.
  noclientlog
    
  # Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
  logchange 0.5
    
  logdir /var/log/chrony
  #log measurements statistics tracking
  [root@192 ~]# 
    
    	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;重启 chrond 服务&lt;/p&gt;

    &lt;p&gt;重启A、B、C机器的chronyd 服务&lt;/p&gt;

    &lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  [root@192 ~]# systemctl restart chronyd.service
  [root@192 ~]# 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;同步时间&lt;/p&gt;

    &lt;p&gt;在 B、C 机器执行 &lt;code class=&quot;highlighter-rouge&quot;&gt;chronyc -a makestep&lt;/code&gt; 同步时间即可。&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;注意事项&quot;&gt;注意事项&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;1.chronyd 与 ntpd 服务是两个相同功能的东西，不能同时运行。
也就是说，chronyd 的 status 是 running 时，ntpd 的 status 应是dead。

2.同步失败，注意防火墙。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;相关命令&quot;&gt;相关命令&lt;/h2&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	systemctl enable chronyd.service  # chronyd 服务开机启动
	systemctl status chronyd.service  # chronyd 服务状态

	timedatectl set-timezone Asia/Shanghai  #设置时区Asia/Shanghai
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
        <pubDate>Wed, 22 Aug 2018 00:00:00 +0000</pubDate>
        <link>http://mind2you.github.io/linux/2018/08/22/Linux-chrony.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/linux/2018/08/22/Linux-chrony.html</guid>
        
        <category>Chrony</category>
        
        
        <category>Linux</category>
        
      </item>
    
      <item>
        <title>Hive</title>
        <description>&lt;h1 id=&quot;hadoop&quot;&gt;Hadoop&lt;/h1&gt;
&lt;h3 id=&quot;1configuration&quot;&gt;1.Configuration&lt;/h3&gt;

&lt;h4 id=&quot;use-the-following&quot;&gt;Use the following:&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;~/bash_profile&lt;/strong&gt;
edit the file as follows:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64
PATH=$JAVA_HOME/bin:$PATH

HADOOP_HOME=/home/test/hadoop/hadoop-2.7.5
PATH=$HADOOP_HOME/bin:$PATH

HIVE_HOME=/home/test/hive/apache-hive-2.3.2
PATH=$HIVE_HOME/bin:$PATH


PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;create hdfs dir:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./hdfs dfs -mkdir /tmp
./hdfs dfs -mkdir -p /hive/warehouse
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;/conf/hive-env.sh:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;HADOOP_HOME=/home/test/hadoop/hadoop-2.7.5

export HIVE_CONF_DIR=/home/test/hive/apache-hive-2.3.2/conf

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;/conf/hive-site.xml:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;use Mysql store metastore：&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;hive.metastore.local&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;javax.jdo.option.ConnectionURL&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;javax.jdo.option.ConnectionDriverName&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;com.mysql.jdbc.Driver&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;javax.jdo.option.ConnectionUserName&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;{mysql.user}&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;javax.jdo.option.ConnectionPassword&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;{mysql.password}&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;  
	&amp;lt;name&amp;gt;hive.metastore.warehouse.dir&amp;lt;/name&amp;gt;  
	&amp;lt;!--之前hdfs中创建的warehouse文件夹--&amp;gt;  
	&amp;lt;value&amp;gt;/hive/warehouse&amp;lt;/value&amp;gt;  
	&amp;lt;description&amp;gt;location of default database for the warehouse&amp;lt;/description&amp;gt;  
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
	&amp;lt;name&amp;gt;hive.exec.scratchdir&amp;lt;/name&amp;gt;
	&amp;lt;!--之前在hdfs中建的tmp文件夹--&amp;gt;
	&amp;lt;value&amp;gt;/tmp/hive&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;!-- 客户端连接 用户名和密码 --&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;hive.server2.thrift.client.user&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;test&amp;lt;/value&amp;gt;
    &amp;lt;description&amp;gt;Username to use against thrift client&amp;lt;/description&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;hive.server2.thrift.client.password&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;test&amp;lt;/value&amp;gt;
    &amp;lt;description&amp;gt;Password to use against thrift client&amp;lt;/description&amp;gt;
  &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;2execution&quot;&gt;2.Execution&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Init metastore:&lt;/strong&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;
$ bin/schematool -dbType mysql -initSchema
&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;hive:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ bin/hive 

hive&amp;gt; show tables;
OK
Time taken: 4.687 seconds
hive&amp;gt; create database test;
OK
Time taken: 0.333 seconds
hive&amp;gt; show databases;
OK
default
test
Time taken: 0.055 seconds, Fetched: 2 row(s)
hive&amp;gt; show tables;
OK
Time taken: 0.05 seconds
hive&amp;gt; 
ive&amp;gt; use test;
OK
Time taken: 0.07 seconds
hive&amp;gt; create table test_1(id int, name string);
OK
Time taken: 0.88 seconds
hive&amp;gt; show tables;
OK
test_1
Time taken: 0.074 seconds, Fetched: 1 row(s)
hive&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;– &lt;strong&gt;后台运行:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;运行hive之前首先要确保meta store服务已经启动，&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nohup hive --service metastore &amp;gt; metastore.log 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;若远程客户端连接到hive数据库，需启动hive service&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nohup hive --service hiveserver2 &amp;gt; hiveserver2.log 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;hr /&gt;
&lt;p&gt;Hadoop安装完后，启动时报
Error: JAVA_HOME is not set and could not be found.&lt;/p&gt;

&lt;p&gt;【解决办法】：修改/etc/hadoop/hadoop-env.sh中设JAVA_HOME。应当使用绝对路径。&lt;/p&gt;

&lt;p&gt;export JAVA_HOME=$JAVA_HOME //错误，不能这么改&lt;/p&gt;

&lt;p&gt;export JAVA_HOME=/usr/java/jdk1.6.0_45 //正确，应该这么改&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Mar 2015 22:21:49 +0000</pubDate>
        <link>http://mind2you.github.io/hadoop/2015/03/08/Hive.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/hadoop/2015/03/08/Hive.html</guid>
        
        <category>Hive</category>
        
        
        <category>Hadoop</category>
        
      </item>
    
      <item>
        <title>Cache-Redis</title>
        <description>&lt;h1 id=&quot;redis&quot;&gt;Redis&lt;/h1&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;standalone单节点&quot;&gt;Standalone（单节点）&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Download tar (example: redis-3.2.8.tar.gz)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Make
See README.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;cluster集群&quot;&gt;Cluster（集群）&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;以 redis-3.2.8 运行3个实例为例，比如，建立如下目录结构&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;redis-3.2.8_cluster
		├── config
		│   ├── redis_31337.conf
		│   ├── redis_31338.conf
		│   └── redis_31339.conf
		│
		├── dbfile
		│
		├── logs
		│
		├── redis-3.2.8
		│   ├── mkreleasehdr.sh
		│   ├── redis-benchmark
		│   ├── redis-check-aof
		│   ├── redis-check-rdb
		│   ├── redis-cli
		│   ├── redis-sentinel
		│   ├── redis-server
		│   └── redis-trib.rb
		│
		├── redis-3.2.2.gem #ruby redis gem
		└── redis-trib.rb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;一些配置项&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;	bind &amp;lt;ip&amp;gt;
	port &amp;lt;port&amp;gt;
	daemonize yes
	pidfile &amp;lt;path&amp;gt;
	logfile &amp;lt;filepath&amp;gt;
	dbfilename &amp;lt;filename&amp;gt;
	dir &amp;lt;directory&amp;gt;
	appendfilename &amp;lt;filename&amp;gt;
	cluster-enabled yes
	cluster-config-file nodes-6379.conf
	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;参数的具体意义参考redis doc。
config下的三个文件 redis_31337.conf&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;运行redis instances
如：&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;/home/test/redis-3.2.8_cluster/redis-3.2.8/redis-server /home/test/redis-3.2.8_cluster/config/redis_31337.conf
/home/test/redis-3.2.8_cluster/redis-3.2.8/redis-server /home/test/redis-3.2.8_cluster/config/redis_31338.conf
/home/test/redis-3.2.8_cluster/redis-3.2.8/redis-server /home/test/redis-3.2.8_cluster/config/redis_31339.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Create cluster
  执行命令&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;./redis-trib.rb create --replicas 0 192.168.137.128:31337 192.168.137.128:31338 192.168.137.128:31339	
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;测试&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;执行命令 &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;./redis-cli -c -h &amp;lt;ip&amp;gt; -p &amp;lt;port&amp;gt;&quot;&lt;/code&gt; 登录 redis server；之后 键入 &lt;code class=&quot;highlighter-rouge&quot;&gt;&quot;cluster info&quot;&lt;/code&gt; 查看集群信息，
如果 cluster-state显示ok，那就真的ok啦。
举个栗子，可能会看到如下的信息，那表示是ok的:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;&amp;gt; cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:2
cluster_stats_messages_sent:77
cluster_stats_messages_received:77
&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;&amp;gt; keys *
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ERROR-1:若提示 increase “ulimit -n”则，以root用户登录主机
在文件&lt;code class=&quot;highlighter-rouge&quot;&gt;/etc/security/limits.d/20-nproc.conf&lt;/code&gt;添加如下行：&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;redis安装用户&amp;gt;      soft    nofile     65536
&amp;lt;redis安装用户&amp;gt;      hard    nofile     65536
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ERROR-2:如果执行&lt;code class=&quot;highlighter-rouge&quot;&gt;./redis-trib.rb&lt;/code&gt;命令报错
确保机器有ruby的环境下，下载 redis gem，执行 &lt;code class=&quot;highlighter-rouge&quot;&gt;gem install ./redis-3.2.2.gem&lt;/code&gt; 命令安装。&lt;/p&gt;

&lt;p&gt;ERROR-3:警告：过量使用内存设置为0！在低内存环境下，后台保存可能失败。为了修正这个问题，
请在/etc/sysctl.conf 添加一项 ‘vm.overcommit_memory = 1’ ，
然后重启（或者运行命令’sysctl vm.overcommit_memory=1’ ）使其生效。
   查看，sysctl -a | grep vm.overcommit_memory
  有三种方式修改内核参数，但要有root权限：&lt;/p&gt;

&lt;p&gt;（1）编辑/etc/sysctl.conf ，改vm.overcommit_memory=1，然后sysctl -p 使配置文件生效&lt;/p&gt;

&lt;p&gt;（2）sysctl vm.overcommit_memory=1&lt;/p&gt;

&lt;p&gt;（3）echo 1 &amp;gt; /proc/sys/vm/overcommit_memory&lt;/p&gt;

</description>
        <pubDate>Sun, 08 Mar 2015 22:21:49 +0000</pubDate>
        <link>http://mind2you.github.io/cache/2015/03/08/Cache-Redis.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/cache/2015/03/08/Cache-Redis.html</guid>
        
        <category>Redis</category>
        
        
        <category>Cache</category>
        
      </item>
    
      <item>
        <title>DB-MySQL</title>
        <description>&lt;h1 id=&quot;mysql&quot;&gt;MySQL&lt;/h1&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;安装&quot;&gt;安装&lt;/h2&gt;

&lt;p&gt;C:\Program Files\MySQL\MySQL Server 5.6&lt;/p&gt;

&lt;p&gt;To start the mysqld server from the command line, you should start a console window (or “DOS window”) and enter this command:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;
C:\&amp;gt; &quot;C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld&quot;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The path to mysqld may vary depending on the install location of MySQL on your system.&lt;/p&gt;

&lt;p&gt;You can stop the MySQL server by executing this command:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;
C:\&amp;gt; &quot;C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqladmin&quot; -u root shutdown
&lt;/code&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;修改自增值&quot;&gt;修改自增值&lt;/h2&gt;

&lt;p&gt;alter table users AUTO_INCREMENT=10000;&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;授权&quot;&gt;授权&lt;/h2&gt;

&lt;p&gt;GRANT ALL PRIVILEGES ON &lt;em&gt;.&lt;/em&gt; TO ‘root’@’%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;&lt;/p&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;sql查询的基本执行过程&quot;&gt;SQL查询的基本执行过程&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;应用通过MySQL API把查询命令发送给MySQL服务器，然后被解析&lt;/li&gt;
  &lt;li&gt;检查权限、MySQL optimizer进行优化，经过解析和优化后的查询命令被编译为CPU可运行的二进制形式的查询计划（query plan），并可以被缓存&lt;/li&gt;
  &lt;li&gt;如果存在索引，那么先扫描索引，如果数据被索引覆盖，那么不需要额外的查找，如果不是，根据索引查找和读取对应的记录&lt;/li&gt;
  &lt;li&gt;如果有关联查询，查询次序是扫描第一张表找到满足条件的记录，按照第一张表和第二张表的关联键值，扫描第二张表查找满足条件的记录，按此顺序循环&lt;/li&gt;
  &lt;li&gt;输出查询结果，并记录binary logs&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;select_type&quot;&gt;SELECT_TYPE&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SIMPLE&lt;/strong&gt;: 简单 SELECT (不使用UNION或子查询等)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;PRIMARY&lt;/strong&gt;: 最外层的 SELECT&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;UNION&lt;/strong&gt;: UNION 中的第二个或后面的 SELECT 语句&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DEPENDENT UNION&lt;/strong&gt;: UNION 中的第二个或后面的SELECT语句，取决于外面的查询&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;UNION RESULT&lt;/strong&gt;: UNION 的结果(此时 ID 为 NULL)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;SUBQUERY&lt;/strong&gt;: 子查询中的第一个 SELECT&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DEPENDENT SUBQUERY&lt;/strong&gt;: 子查询中的第一个 SELECT ，取决于外面的查询&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DERIVED&lt;/strong&gt;: 派生表的 SELECT ( FROM 子句的子查询)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;type&quot;&gt;TYPE&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;SYSTEM&lt;/strong&gt;: CONST的特例，当表上只有一条元组匹配&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CONST&lt;/strong&gt;: WHERE条件筛选后表上至多有一条元组匹配时，比如WHERE ID = 2 （ID是主键，值为2的要么有一条要么没有）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;EQ_REF&lt;/strong&gt;: 参与连接运算的表是内表（在代码实现的算法中，两表连接时作为循环中的内循环遍历的对象，这样的表称为内表）。基于索引（连接字段上存在唯一索引或者主键索引，且操作符必须是“=”，索引值不能为NULL）做扫描，使得对外表的一条元组，内表只有唯一一条元组与之对应。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;REF&lt;/strong&gt;: 可以用于单表扫描或者连接(参与连接运算的表是内表)，基于索引（连接字段上的索引是非唯一索引，操作符必须是“=”，连接字段值不可为NULL）做扫描，使得对外表的一条元组，内表可有若干条元组与之对应。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;FULLTEXT&lt;/strong&gt;: FULL TEXT，全文检索&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;REF_OR_NULL&lt;/strong&gt;: 类似REF，只是搜索条件包括：连接字段的值可以为NULL的情况，比如 where col = 2 or col is null&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;INDEX_MERGE&lt;/strong&gt;: 多重范围扫描。两表连接的每个表的连接字段上均有索引存在且索引有序，结果合并在一起。&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;UNIQUE_SUBQUERY&lt;/strong&gt;: 在子查询中，基于唯一索引进行扫描，类似于EQ_REF&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;INDEX_SUBQUERY&lt;/strong&gt;: 在子查询中，基于除唯一索引之外的索引进行扫描&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RANGE&lt;/strong&gt;: 范围扫描，基于索引做范围扫描，为诸如BETWEEN，IN，&amp;gt;=，LIKE类操作提供支持&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;INDEX&lt;/strong&gt;: 索引做扫描，是基于索引在索引的叶子节点上找满足条件的数据（不需要访问数据文件）&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ALL&lt;/strong&gt;: 全表扫描或者范围扫描：不使用索引，顺序扫描，直接读取表上的数据（访问数据文件）&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;key_len&quot;&gt;KEY_LEN&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;一般地，key_len 等于索引列类型字节长度，例如int类型为4-bytes，bigint为8-bytes；&lt;/li&gt;
  &lt;li&gt;如果是字符串类型，还需要同时考虑字符集因素，例如：CHAR(30) UTF8则key_len至少是90-bytes；&lt;/li&gt;
  &lt;li&gt;若该列类型定义时允许NULL，其key_len还需要再加 1-bytes；&lt;/li&gt;
  &lt;li&gt;若该列类型为变长类型，例如 VARCHAR（TEXT\BLOB不允许整列创建索引，如果创建部分索引，也被视为动态列类型），其key_len还需要再加 2-bytes;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;h2 id=&quot;extra&quot;&gt;EXTRA&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;USING WHERE&lt;/strong&gt;: 使用了WHERE子句来过滤元组&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;USING TEMPORARY&lt;/strong&gt;: 用临时表保存中间结果，常用于GROUP BY 和 ORDER BY操作中&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;USING FILESORT&lt;/strong&gt;: 使用文件完成排序操作，这是可能是ORDERY BY，GROUP BY语句的结果&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;USING INDEX&lt;/strong&gt;: 不需要读取数据文件，从索引树（索引文件）中即可获得信息&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DISTINCT&lt;/strong&gt;: 优化DISTINCT操作，在找到第一匹配的元组后即停止找同样值的动作&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Sun, 08 Mar 2015 22:21:49 +0000</pubDate>
        <link>http://mind2you.github.io/db/2015/03/08/DB-MySQL.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/db/2015/03/08/DB-MySQL.html</guid>
        
        <category>MySQL</category>
        
        
        <category>DB</category>
        
      </item>
    
      <item>
        <title>开发前写一份文档</title>
        <description>&lt;p&gt;优秀的程序员应该学会开发前写一份文档&lt;/p&gt;

&lt;p&gt;2016-08-07 11:42&lt;/p&gt;

&lt;p&gt;如果作为一个想升级变成更好的程序员，在开发前就应该写一份设计规范文档。&lt;/p&gt;

&lt;p&gt;那这一份设计规范有什么用？&lt;/p&gt;

&lt;p&gt;1.解决多人开发时，页面无规范而导致混乱不统一的问题。如果没有规范来指引，设计过程中很容易产生细微的出入，导致每个页面都会有细微的差别，经常会做着做着页面不一致的问题。例如一个按钮控件A页面是4PX圆角、B页面又变成2PX圆角。一个人做页面都会出现这些问题，更何况是多人协助开发呢？另外，当新人加入时对产品理解不够透彻，这时有一份设计规范更能快速上手，并且保持产品统一性&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;data:image/jpg;base64,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XEbrgDVe+4aS9xSwXv5MIKJi76Kvq8ZwmWs2NVPUtzSvqXwRRsMEGZzmh7cxOtm6m++w1XmSamrZKuBr4HPZQSNf3Rij5Ii7aR5XbUOLwwm2mh0Isr/3JTZ3v7nizyOzPdkF3GwFzz0AH2L62kp2TbZkEbZcuTOGgOy3BtffvAQc3mgmp4WSUeJzDZUL9uGubMGF0rW5s74w4mS8jibAks00Ct9LRVFVSRsp+klfamLqd72Rwkvc1xF3F8Zu7cCRYEjcLqY7kpiyZhp4sk5JmbkFpCRYlw46aar1BTw0sDYaeKOGJnixxtDWt9gGiCNZhFc2RrndIsSeAQS10VNZ3qNorqWREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBaVfLUsiy0zJTKJafNaIkZHTAP1tY+DmvbcNdLrdURF0fw+OqmcKDD200jMmwZRsGYXBOd2ubVoItlA43NiAk6hzoo85Y90bTeTLmLg2x1a1oJcb20Hr5WPkPmfVuaGsbDG0NddrruebHQmwygcRe5PDKb6LsCoXNZAKSiZQtkMpp20jLOdlAF7gjnqADuFxY5lHgdJR1BqW09K6qdUSzPqHQDaWe5xyh17i2YC+twDoL6BJwbQsJmYGuzuAFgPBzHL9Y8La/cNw18OFV3tpBW/3zYs227/iZRm3ab77tFsSGTZOETw2SxyOcMzQeFxcXHquFqPw+HvUMOiDW04iEGR2Y/g7ZS24IN8twDfQ667kHrDZXVNK2pMzZI6g7SItFmiM+La4BFxYkG9iSN1lslrtsNJMmU65m5b6fbf7t68zRmaCSISPjL2lokjNnNJG8esLFHTlsz5p37ZxfdgIs2MC4AaOBsTd283PCzQGhiOLTUVfNFDTunywwuykPIGZ0tzaOJ7r+AN+m7cfGx0dTVmhnqsTqY6OlNOyOOR0mV7X3c10jjJEzKSS2wLbXGg1UhTUskVdJVyytfJJTxQuDGZRdjnkuGp0OfdwtvK2PwhqS8yXhyZRHl+tfUk/YLAW43vcWCKOLVPeLFa3udrZKM1QiJPgv2TnhpsDe3ggHUEnNoBa+47vlHKC91KY3uLGRthkJA/Kc8Gw0DjbKBchub6xxxYXHHSyQnZyOklmJe+O/4OWQvezffcbXvvANtLLbmhZO+Iu/8NxdoG3uWlu+1xo46ix9drghq0EtXV0rp3TU99s8MEbbt2YfbWzzd1gdQRYnUaL3Q4vR4kAaXblrmCRr300sbXN01DnNAO/gVhp8NnpI6iKmrpMk02cGfNM6NhaAWtc52/MC4E3AvuKzvoGto6WkpHmnhgdHYAknIyxDQb6XsASb3FxxuA20REBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERB/9k=&quot; alt=&quot;img01&quot; /&gt;&lt;/p&gt;

&lt;p&gt;2.解决代码冗余的问题&lt;/p&gt;

&lt;p&gt;无规范则每个页面都需要重新写一套CSS代码随着页面越多，工作量越大影响项目进度，代码也会越来越臃肿。而如果有规范则只需调用同一个css就可以了&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/02.jpg&quot; alt=&quot;img02&quot; /&gt;&lt;/p&gt;

&lt;p&gt;那该如何写一份设计规范文档呢？可参考以下5个维度。&lt;/p&gt;

&lt;p&gt;1.信息系统&lt;/p&gt;

&lt;p&gt;字号：应该有一个全局的规划，在同一个页面内不要使用太多太相近的字号，例如 12、13、14.如果使用太接近的字号，会导致页面层级对比比较弱，不利于阅读。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/03.jpg&quot; alt=&quot;img03&quot; /&gt;&lt;/p&gt;

&lt;p&gt;颜色：避免使用相近的字体颜色，在同一个层级使用颜色区分是没必要的。产品常用的字体颜色深浅层级可以参考#333333、#666666、#999999&lt;/p&gt;

&lt;p&gt;字体：避免使用相似的字体，字体数量应做减法，能用1种字体就别用两种字体。&lt;/p&gt;

&lt;p&gt;2.控件系统&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/04.jpg&quot; alt=&quot;img04&quot; /&gt;&lt;/p&gt;

&lt;p&gt;按钮样式应统一样式，就算页面中按钮的宽高不同，也应该按照宽高比例进行缩放。&lt;/p&gt;

&lt;p&gt;按钮通常会有4种鼠标状态，也是需要注意统一视觉效果的。分别是：正常状态、鼠标经过、鼠标单击、访问过后。&lt;/p&gt;

&lt;p&gt;3.布局系统&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/05.jpg&quot; alt=&quot;img05&quot; /&gt;&lt;/p&gt;

&lt;p&gt;行间距能表明内容之间的层级和从属关系，凌乱复杂的行间距会对用户认知造成较大的困扰。一个页面中，最多使用5种行间距，能少用就尽量少用&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/06.jpg&quot; alt=&quot;img06&quot; /&gt;&lt;/p&gt;

&lt;p&gt;内边距尽量不要大于外边距。外边距大于内边距时，有适当的留白，用户的视线不受干扰，更专注于内容本身&lt;/p&gt;

&lt;p&gt;4.配色系统&lt;/p&gt;

&lt;p&gt;主色：选择主色调的时候应该结合产品的特性、用户对象。色彩决定产品的风格。&lt;/p&gt;

&lt;p&gt;辅色：辅助色应用主色调的：邻近色、对比色。辅色选择1~3种配合使用&lt;/p&gt;

&lt;p&gt;产品色彩最好控制在4种颜色以内&lt;/p&gt;

&lt;p&gt;5.品牌系统&lt;/p&gt;

&lt;p&gt;LOGO应用：LOGO定稿后应将各种组合整理出来，便于后续使用。例如&lt;/p&gt;

&lt;p&gt;左右结构、上下结构&lt;/p&gt;

&lt;p&gt;反白、黑白&lt;/p&gt;

&lt;p&gt;最小尺寸、加载错误的显示方式&lt;/p&gt;

&lt;p&gt;这就是撰写产品设计文档规范的5个方法。以下是笔者自己整理的脑图、以及网上搜集的网易云音乐的设计文档规范图。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/07.jpg&quot; alt=&quot;img07&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/08.jpg&quot; alt=&quot;img08&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/09.jpg&quot; alt=&quot;img09&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/img/2015-03-08-开发前写一份文档/10.jpg&quot; alt=&quot;img10&quot; /&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;【转载】-原文参考：http://top.caibaojian.com/113807
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
        <pubDate>Sun, 08 Mar 2015 22:21:49 +0000</pubDate>
        <link>http://mind2you.github.io/docs/2015/03/08/%E5%BC%80%E5%8F%91%E5%89%8D%E5%86%99%E4%B8%80%E4%BB%BD%E6%96%87%E6%A1%A3.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/docs/2015/03/08/%E5%BC%80%E5%8F%91%E5%89%8D%E5%86%99%E4%B8%80%E4%BB%BD%E6%96%87%E6%A1%A3.html</guid>
        
        <category>Document</category>
        
        
        <category>Docs</category>
        
      </item>
    
      <item>
        <title>Welcome to here!</title>
        <description>&lt;p&gt;You’ll find this post in your &lt;code class=&quot;highlighter-rouge&quot;&gt;_posts&lt;/code&gt; directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run &lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll serve&lt;/code&gt;, which launches a web server and auto-regenerates your site when a file is updated.&lt;/p&gt;

&lt;p&gt;To add new posts, simply add a file in the &lt;code class=&quot;highlighter-rouge&quot;&gt;_posts&lt;/code&gt; directory that follows the convention &lt;code class=&quot;highlighter-rouge&quot;&gt;YYYY-MM-DD-name-of-post.ext&lt;/code&gt; and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.&lt;/p&gt;

&lt;p&gt;Jekyll also offers powerful support for code snippets:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;print_hi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;nb&quot;&gt;puts&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Hi, &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;print_hi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Tom'&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#=&amp;gt; prints 'Hi, Tom' to STDOUT.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Check out the &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll docs&lt;/a&gt; for more info on how to get the most out of Jekyll. File all bugs/feature requests at &lt;a href=&quot;https://github.com/jekyll/jekyll&quot;&gt;Jekyll’s GitHub repo&lt;/a&gt;. If you have questions, you can ask them on &lt;a href=&quot;https://github.com/jekyll/jekyll-help&quot;&gt;Jekyll’s dedicated Help repository&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Sun, 08 Mar 2015 22:21:49 +0000</pubDate>
        <link>http://mind2you.github.io/about/2015/03/08/welcome.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/about/2015/03/08/welcome.html</guid>
        
        <category>about</category>
        
        
        <category>About</category>
        
      </item>
    
      <item>
        <title>Hadoop</title>
        <description>&lt;h1 id=&quot;hadoop&quot;&gt;Hadoop&lt;/h1&gt;
&lt;h3 id=&quot;1configuration&quot;&gt;1.Configuration&lt;/h3&gt;

&lt;h4 id=&quot;use-the-following&quot;&gt;Use the following:&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Prepare to Start the Hadoop Cluster:&lt;/strong&gt;
edit the file &lt;strong&gt;&lt;em&gt;etc/hadoop/hadoop-env.sh&lt;/em&gt;&lt;/strong&gt; to define some parameters as follows:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;etc/hadoop/core-site.xml:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;fs.defaultFS&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;hdfs://localhost:9000&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
	&amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;hadoop.tmp.dir&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;file:/home/test/tmp/&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;ha.zookeeper.quorum&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;127.0.0.1:2181&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;etc/hadoop/hdfs-site.xml:&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;dfs.namenode.name.dir&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;file:/${hadoop.tmp.dir}/dfs/name&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
    &amp;lt;property&amp;gt;
        &amp;lt;name&amp;gt;dfs.datanode.data.dir&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;file:/${hadoop.tmp.dir}/dfs/data&amp;lt;/value&amp;gt;
    &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;这个value要注意,后边应该是一个”/”(如：file:/home/test/tmp)&lt;/p&gt;

&lt;h3 id=&quot;2execution&quot;&gt;2.Execution&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Format the filesystem:&lt;/strong&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;
$ bin/hdfs namenode -format
&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Start NameNode daemon and DataNode daemon:&lt;/strong&gt;
&lt;code class=&quot;highlighter-rouge&quot;&gt;
$ sbin/start-dfs.sh
&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hadoop daemon log output is written to the $HADOOP_LOG_DIR directory (defaults to $HADOOP_HOME/logs).&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Browse the web interface for the NameNode&lt;/strong&gt;; by default it is available at:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;NameNode - http://localhost:50070/&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3filesystemshell&quot;&gt;3.FileSystemShell&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;mkdir&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usage: hadoop fs -mkdir [-p] &lt;paths&gt;&lt;/paths&gt;&lt;/p&gt;

&lt;p&gt;Takes path uri’s as argument and creates directories.&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;The -p option behavior is much like Unix mkdir -p, creating parent directories along the path.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
$ hadoop fs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Exit Code:&lt;/p&gt;

&lt;p&gt;Returns 0 on success and -1 on error.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;mv&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usage: hadoop fs -mv URI [URI …] &lt;dest&gt;&lt;/dest&gt;&lt;/p&gt;

&lt;p&gt;Moves files from source to destination. This command allows multiple sources as well in which case the destination needs to be a directory. Moving files across file systems is not permitted.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
$ hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Exit Code:&lt;/p&gt;

&lt;p&gt;Returns 0 on success and -1 on error.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;put&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usage: hadoop fs -put &lt;localsrc&gt; ... &lt;dst&gt;&lt;/dst&gt;&lt;/localsrc&gt;&lt;/p&gt;

&lt;p&gt;Copy single src, or multiple srcs from local file system to the destination file system. Also reads input from stdin and writes to destination file system.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ hadoop fs -put localfile /user/hadoop/hadoopfile
$ hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
$ hadoop fs -put localfile hdfs://nn.example.com/hadoop/hadoopfile
$ hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Exit Code:&lt;/p&gt;

&lt;p&gt;Returns 0 on success and -1 on error.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;strong&gt;rm&lt;/strong&gt;&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Usage: hadoop fs -rm [-f] [-r&lt;/td&gt;
      &lt;td&gt;-R] [-skipTrash] URI [URI …]&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Delete files specified as args.&lt;/p&gt;

&lt;p&gt;If trash is enabled, file system instead moves the deleted file to a trash directory (given by FileSystem#getTrashRoot).&lt;/p&gt;

&lt;p&gt;Currently, the trash feature is disabled by default. User can enable trash by setting a value greater than zero for parameter fs.trash.interval (in core-site.xml).&lt;/p&gt;

&lt;p&gt;See expunge about deletion of files in trash.&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;The -f option will not display a diagnostic message or modify the exit status to reflect an error if the file does not exist.
The -R option deletes the directory and any content under it recursively.
The -r option is equivalent to -R.
The -skipTrash option will bypass trash, if enabled, and delete the specified file(s) immediately. This can be useful when it is necessary to delete files from an over-quota directory.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;$ hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Exit Code:&lt;/p&gt;

&lt;p&gt;Returns 0 on success and -1 on error.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Hadoop安装完后，启动时报
Error: JAVA_HOME is not set and could not be found.&lt;/p&gt;

&lt;p&gt;【解决办法】：修改/etc/hadoop/hadoop-env.sh中设JAVA_HOME。应当使用绝对路径。&lt;/p&gt;

&lt;p&gt;export JAVA_HOME=$JAVA_HOME //错误，不能这么改&lt;/p&gt;

&lt;p&gt;export JAVA_HOME=/usr/java/jdk1.6.0_45 //正确，应该这么改&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Mar 2015 22:21:49 +0000</pubDate>
        <link>http://mind2you.github.io/hadoop/2015/03/08/hadoop.html</link>
        <guid isPermaLink="true">http://mind2you.github.io/hadoop/2015/03/08/hadoop.html</guid>
        
        <category>Hadoop</category>
        
        
        <category>Hadoop</category>
        
      </item>
    
  </channel>
</rss>
