diff --git a/.gitignore b/.gitignore
index 0ae87d9d0854..0b883e082c20 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ linklint/
.checkstyle
**/.checkstyle
.java-version
+tmp
diff --git a/conf/hbase-site.xml b/conf/hbase-site.xml
index c516ac729114..20c62f7984a1 100644
--- a/conf/hbase-site.xml
+++ b/conf/hbase-site.xml
@@ -1,8 +1,7 @@
+
+
+ hbase.cluster.distributed
+ false
+
+
+ hbase.tmp.dir
+ ./tmp
+
+
+ hbase.unsafe.stream.capability.enforce
+ false
+
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java
index 2e21605c0847..d46352dd2ee0 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java
@@ -28,12 +28,12 @@
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FSDataOutputStreamBuilder;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
@@ -41,6 +41,7 @@
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.ipc.RemoteException;
import org.apache.yetus.audience.InterfaceAudience;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -354,14 +355,6 @@ public static FileSystem getWALFileSystem(final Configuration c) throws IOExcept
if (enforceStreamCapability != null) {
fs.getConf().set(UNSAFE_STREAM_CAPABILITY_ENFORCE, enforceStreamCapability);
}
- if (fs instanceof LocalFileSystem) {
- // running on LocalFileSystem, which does not support the required capabilities `HSYNC`
- // and `HFLUSH`. disable enforcement.
- final boolean value = false;
- LOG.warn("Cannot enforce durability guarantees while running on {}. Setting {}={} for"
- + " this FileSystem.", fs.getUri(), UNSAFE_STREAM_CAPABILITY_ENFORCE, value);
- fs.getConf().setBoolean(UNSAFE_STREAM_CAPABILITY_ENFORCE, value);
- }
return fs;
}
diff --git a/src/main/asciidoc/_chapters/getting_started.adoc b/src/main/asciidoc/_chapters/getting_started.adoc
index 84ebcaa67b57..e50ea6bd4a73 100644
--- a/src/main/asciidoc/_chapters/getting_started.adoc
+++ b/src/main/asciidoc/_chapters/getting_started.adoc
@@ -80,76 +80,12 @@ $ cd hbase-{Version}/
JAVA_HOME=/usr
----
+
-
-. Edit _conf/hbase-site.xml_, which is the main HBase configuration file.
- At this time, you need to specify the directory on the local filesystem where HBase and ZooKeeper write data and acknowledge some risks.
- By default, a new directory is created under /tmp.
- Many servers are configured to delete the contents of _/tmp_ upon reboot, so you should store the data elsewhere.
- The following configuration will store HBase's data in the _hbase_ directory, in the home directory of the user called `testuser`.
- Paste the `` tags beneath the `` tags, which should be empty in a new HBase install.
-+
-.Example _hbase-site.xml_ for Standalone HBase
-====
-[source,xml]
-----
-
-
-
- hbase.rootdir
- file:///home/testuser/hbase
-
-
- hbase.zookeeper.property.dataDir
- /home/testuser/zookeeper
-
-
- hbase.unsafe.stream.capability.enforce
- false
-
- Controls whether HBase will check for stream capabilities (hflush/hsync).
-
- Disable this if you intend to run on LocalFileSystem, denoted by a rootdir
- with the 'file://' scheme, but be mindful of the NOTE below.
-
- WARNING: Setting this to false blinds you to potential data loss and
- inconsistent system state in the event of process and/or node failures. If
- HBase is complaining of an inability to use hsync or hflush it's most
- likely not a false positive.
-
-
-
-----
-====
-+
-You do not need to create the HBase data directory.
-HBase will do this for you. If you create the directory,
-HBase will attempt to do a migration, which is not what you want.
-+
-NOTE: The _hbase.rootdir_ in the above example points to a directory
-in the _local filesystem_. The 'file://' prefix is how we denote local
-filesystem. You should take the WARNING present in the configuration example
-to heart. In standalone mode HBase makes use of the local filesystem abstraction
-from the Apache Hadoop project. That abstraction doesn't provide the durability
-promises that HBase needs to operate safely. This is fine for local development
-and testing use cases where the cost of cluster failure is well contained. It is
-not appropriate for production deployments; eventually you will lose data.
-
-To home HBase on an existing instance of HDFS, set the _hbase.rootdir_ to point at a
-directory up on your instance: e.g. _hdfs://namenode.example.org:8020/hbase_.
-For more on this variant, see the section below on Standalone HBase over HDFS.
-
. The _bin/start-hbase.sh_ script is provided as a convenient way to start HBase.
Issue the command, and if all goes well, a message is logged to standard output showing that HBase started successfully.
You can use the `jps` command to verify that you have one running process called `HMaster`.
In standalone mode HBase runs all daemons within this single JVM, i.e.
the HMaster, a single HRegionServer, and the ZooKeeper daemon.
Go to _http://localhost:16010_ to view the HBase Web UI.
-+
-NOTE: Java needs to be installed and available.
-If you get an error indicating that Java is not installed,
-but it is on your system, perhaps in a non-standard location,
-edit the _conf/hbase-env.sh_ file and modify the `JAVA_HOME`
-setting to point to the directory that contains _bin/java_ on your system.
[[shell_exercises]]
@@ -309,7 +245,7 @@ The above has shown you how to start and stop a standalone instance of HBase.
In the next sections we give a quick overview of other modes of hbase deploy.
[[quickstart_pseudo]]
-=== Pseudo-Distributed Local Install
+=== Pseudo-Distributed for Local Testing
After working your way through <> standalone mode,
you can re-configure HBase to run in pseudo-distributed mode.
@@ -351,8 +287,8 @@ First, add the following property which directs HBase to run in distributed mode
----
+
-Next, change the `hbase.rootdir` from the local filesystem to the address of your HDFS instance, using the `hdfs:////` URI syntax.
-In this example, HDFS is running on the localhost at port 8020. Be sure to either remove the entry for `hbase.unsafe.stream.capability.enforce` or set it to true.
+Next, add a configuration for `hbase.rootdir`, pointing to the address of your HDFS instance, using the `hdfs:////` URI syntax.
+In this example, HDFS is running on the localhost at port 8020.
+
[source,xml]
----
@@ -364,8 +300,9 @@ In this example, HDFS is running on the localhost at port 8020. Be sure to eithe
----
+
You do not need to create the directory in HDFS.
-HBase will do this for you.
-If you create the directory, HBase will attempt to do a migration, which is not what you want.
+HBase will do this for you. If you create the directory, HBase will attempt to do a migration, which is not what you want.
++
+Finally, remove existing configuration for `hbase.tmp.dir` and `hbase.unsafe.stream.capability.enforce`,
. Start HBase.
+
@@ -452,7 +389,7 @@ You can stop HBase the same way as in the <> procedure, u
[[quickstart_fully_distributed]]
-=== Advanced - Fully Distributed
+=== Fully Distributed for Production
In reality, you need a fully-distributed configuration to fully test HBase and to use it in real-world scenarios.
In a distributed configuration, the cluster contains multiple nodes, each of which runs one or more HBase daemon.