{"id":734,"date":"2018-06-08T00:00:00","date_gmt":"2018-06-08T00:00:00","guid":{"rendered":"https:\/\/en.pingcap.com\/blog\/how_to_spin_up_an_htap_database_in_5_minutes_with_tidb_tispark\/"},"modified":"2024-08-20T06:43:21","modified_gmt":"2024-08-20T13:43:21","slug":"how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/","title":{"rendered":"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark"},"content":{"rendered":"<p><a href=\"https:\/\/www.pingcap.com\/ko\/tidb\/\">\ud2f0DB<\/a> is an open-source distributed Hybrid Transactional and Analytical Processing (HTAP) database built by PingCAP, powering companies to do real-time data analytics on live transactional data in the same data warehouse &#8212; minimize ETL, no more T+1, no more delays. More than 200 companies are now using TiDB in production. Its 2.0 version was launched in late April 2018 (read about it in <a href=\"https:\/\/www.pingcap.com\/ko\/press-release\/tidb-2-0-announcement\/\">this blog post<\/a>).<\/p>\n<p>In this 5-minute tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer, so you can get a taste of its hybrid power, before using it for work or your own project in production. A standard TiDB cluster includes TiDB (MySQL compatible stateless SQL layer), <a href=\"https:\/\/github.com\/tikv\/tikv\">TiKV<\/a> (a distributed transactional key-value store where the data is stored), and <a href=\"https:\/\/github.com\/pingcap\/tispark\">TiSpark<\/a> (an Apache Spark plug-in that powers complex analytical queries within the TiDB ecosystem).<\/p>\n<p>Ready? Let&#8217;s get started!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Setting_Up\"><\/span>Setting Up<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Before we start deploying TiDB, we&#8217;ll need a few things first: <code>wget<\/code>, Git, Docker, and a MySQL client. If you don&#8217;t have them installed already, here are the instructions to get them.<\/p>\n<p><main class=\"tabs\"><input id=\"tabMacOS\" checked=\"checked\" name=\"tabs\" type=\"radio\" value=\"macOSContent\" \/><label for=\"tabMacOS\"><br \/>\n<img decoding=\"async\" class=\"wp-image-735\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png\" width=\"20\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/1000px-Apple_logo_black.svg.png 1000w, https:\/\/static.pingcap.com\/files\/2018\/06\/1000px-Apple_logo_black.svg-253x300.png 253w, https:\/\/static.pingcap.com\/files\/2018\/06\/1000px-Apple_logo_black.svg-862x1024.png 862w, https:\/\/static.pingcap.com\/files\/2018\/06\/1000px-Apple_logo_black.svg-768x912.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><br \/>\n<span class=\"label__title\">macOS<\/span><br \/>\n<\/label><br \/>\n<input id=\"tabLinux\" name=\"tabs\" type=\"radio\" value=\"linuxContent\" \/><label for=\"tabLinux\"><br \/>\n<img decoding=\"async\" class=\"wp-image-736\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/Linux_-_Tux-512.png\" width=\"20\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/Linux_-_Tux-512.png 512w, https:\/\/static.pingcap.com\/files\/2018\/06\/Linux_-_Tux-512-300x300.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/Linux_-_Tux-512-150x150.png 150w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><br \/>\n<span class=\"label__title\">Linux<\/span><br \/>\n<\/label><\/main><\/p>\n<section id=\"macOSContent\">\n<h3>macOS Setting Up<\/h3>\n<ol>\n<li>To install <code>brew<\/code>, go <a href=\"https:\/\/brew.sh\/\">\uc5ec\uae30<\/a>.<\/li>\n<li>To install <code>wget<\/code>, use the command below in your Terminal:\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">brew install wget --with-libressl<\/code><\/pre>\n<\/div>\n<\/li>\n<li>To install Git, use the command below in your Terminal:\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">brew install git<\/code><\/pre>\n<\/div>\n<\/li>\n<li>Install Docker: <a href=\"https:\/\/www.docker.com\/community-edition\">https:\/\/www.docker.com\/community-edition<\/a>.<\/li>\n<li>Install a MySQL client:\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">brew install mysql-client<\/code><\/pre>\n<\/div>\n<\/li>\n<\/ol>\n<\/section>\n<section id=\"linuxContent\">\n<h3>Linux Setting Up<\/h3>\n<ol>\n<li>To install <code>wget<\/code>, Git, and MySQL, use the command below in your Terminal:\n<ul>\n<li>For CentOS\/Fedora:\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">sudo yum install wget git mysql<\/code><\/pre>\n<\/div>\n<\/li>\n<li>For Ubuntu\/Debian:\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">sudo apt install wget git mysql-client<\/code><\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<\/li>\n<li>To install Docker, go <a href=\"https:\/\/docs.docker.com\/install\/\">here.<\/a>After Docker is installed, use the following command to start it and add the current user to the Docker user group:\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">sudo systemctl start docker    # start docker daemo<\/code><\/pre>\n<\/div>\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">sudo usermod -aG docker $(whoami)   # add the current user to the Docker user group, so you can run docker without sudo<\/code><\/pre>\n<\/div>\n<p>You need to log out and back in for this to take effect. Then use the following command to verify that Docker is running normally:<\/p>\n<div class=\"highlight\">\n<pre style=\"color: #f8f8f2; background-color: #272822; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4;\"><code class=\"language-bash\" data-lang=\"bash\">docker info<\/code><\/pre>\n<\/div>\n<\/li>\n<\/ol>\n<\/section>\n<h2><span class=\"ez-toc-section\" id=\"Spin_up_a_TiDB_cluster\"><\/span>Spin up a TiDB cluster<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now that Docker is set up, let&#8217;s deploy TiDB!<\/p>\n<ol>\n<li>Clone TiDB Docker Compose onto your laptop:\n<pre><code class=\"language-bash\">git clone https:\/\/github.com\/pingcap\/tidb-docker-compose\n<\/code><\/pre>\n<\/li>\n<li>Optionally, you can use <code>docker-compose pull<\/code> to get the latest Docker images.<\/li>\n<li>Change your directory to <code>tidb-docker-compose<\/code>:\n<pre><code class=\"language-bash\">cd tidb-docker-compose\n<\/code><\/pre>\n<\/li>\n<li>Deploy TiDB on your laptop:\n<pre><code class=\"language-bash\">docker-compose up -d\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>You can see messages in your terminal launching the default components of a TiDB cluster: 1 TiDB instance, 3 TiKV instances, 3 Placement Driver (PD) instances, Prometheus, Grafana, 2 TiSpark instances (one primary, one secondary), and a TiDB-Vision instance.<\/p>\n<p>Your terminal will show something like this:<\/p>\n<p><strong>Congratulations! You have just deployed a TiDB cluster on your laptop!<\/strong><\/p>\n<p>To check if your deployment is successful:<\/p>\n<ul>\n<li>Go to: http:\/\/localhost:3000 to launch Grafana with default user\/password: admin\/admin.<br \/>\n<blockquote><p><strong>Note:<\/strong><\/p>\n<p>If you are deploying TiDB on a remote machine rather than a local PC, go to <code>http:\/\/&lt;remote host's IP address&gt;:3000<\/code> instead to access the Grafana monitoring dashboard.<\/p><\/blockquote>\n<ul>\n<li>Go to <code>\uc9d1<\/code> and click on the pull down menu to see dashboards of different TiDB components: TiDB, TiKV, PD, entire cluster.<\/li>\n<li>You will see a dashboard full of panels and stats on your current TiDB cluster. Feel free to play around in Grafana, e.g. <code>TiDB-Cluster-TiKV<\/code>, or <code>TiDB-Cluster-PD<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<img loading=\"lazy\" decoding=\"async\" width=\"2404\" height=\"916\" class=\"wp-image-738\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/grafana_display_of_tikv_metrics.png\" alt=\"Grafana display of TiKV metrics\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics.png 2404w, https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics-300x114.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics-1024x390.png 1024w, https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics-768x293.png 768w, https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics-1536x585.png 1536w, https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics-2048x780.png 2048w, https:\/\/static.pingcap.com\/files\/2018\/06\/grafana_display_of_tikv_metrics-1440x549.png 1440w\" sizes=\"auto, (max-width: 2404px) 100vw, 2404px\" \/>\n<div class=\"caption-center\">Grafana display of TiKV metrics<\/div>\n<ul>\n<li>Now go to TiDB-vision at http:\/\/localhost:8010 (TiDB-vision is a cluster visualization tool to see data transfer and load-balancing inside your cluster).\n<ul>\n<li>You can see a ring of 3 <a href=\"http:\/\/bit.ly\/tikv_repo_publication\">TiKV<\/a> nodes. TiKV applies the Raft consensus protocol to provide strong consistency and high availability. Light grey blocks are empty spaces, dark grey blocks are Raft followers, and dark green blocks are Raft leaders. If you see flashing green bands, that represent communications between TiKV nodes.<\/li>\n<li>It looks something like this:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<img loading=\"lazy\" decoding=\"async\" width=\"2176\" height=\"1914\" class=\"wp-image-739\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/tidb_vision.png\" alt=\"TiDB-vision\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision.png 2176w, https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision-300x264.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision-1024x901.png 1024w, https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision-768x676.png 768w, https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision-1536x1351.png 1536w, https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision-2048x1801.png 2048w, https:\/\/static.pingcap.com\/files\/2018\/06\/tidb_vision-1440x1267.png 1440w\" sizes=\"auto, (max-width: 2176px) 100vw, 2176px\" \/>\n<div class=\"caption-center\">TiDB-vision<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Test_TiDB_compatibility_with_MySQL\"><\/span>Test TiDB compatibility with MySQL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>As we mentioned, TiDB is MySQL compatible. You can use TiDB as MySQL secondaries with instant horizontal scalability. That&#8217;s how many innovative tech companies, like Mobike, use TiDB.<\/p>\n<p>To test out this MySQL compatibility:<\/p>\n<ol>\n<li>Keep the <code>tidb-docker-compose<\/code> running, and launch a new Terminal tab or window.<\/li>\n<li>Add MySQL to the path (if you haven&#8217;t already):\n<pre><code class=\"language-bash\">export PATH=${PATH}:\/usr\/local\/mysql\/bin\n<\/code><\/pre>\n<\/li>\n<li>Launch a MySQL client that connects to TiDB:\n<pre><code class=\"language-sql\">mysql -h 127.0.0.1 -P 4000  -u root\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p><strong>Result:<\/strong> You will see the following message, which shows that TiDB is indeed connected to your MySQL instance:<\/p>\n<blockquote><p>Note: TiDB version number may be different.<\/p><\/blockquote>\n<pre><code class=\"language-bash\">Server version: 5.7.10-TiDB-v2.0.0-rc.4-31\n<\/code><\/pre>\n<img loading=\"lazy\" decoding=\"async\" width=\"1422\" height=\"578\" class=\"wp-image-740\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/test_tidb_compatibility_with_mysql.png\" alt=\"TiDB Compatibility with MySQL\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/test_tidb_compatibility_with_mysql.png 1422w, https:\/\/static.pingcap.com\/files\/2018\/06\/test_tidb_compatibility_with_mysql-300x122.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/test_tidb_compatibility_with_mysql-1024x416.png 1024w, https:\/\/static.pingcap.com\/files\/2018\/06\/test_tidb_compatibility_with_mysql-768x312.png 768w\" sizes=\"auto, (max-width: 1422px) 100vw, 1422px\" \/>\n<div class=\"caption-center\">The Compatibility of TiDB with MySQL<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Lets_get_some_data\"><\/span>Let&#8217;s get some data!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now we will grab some sample data that we can play around with.<\/p>\n<ol>\n<li>Open a new Terminal tab or window and download the <code>tispark-sample-data.tar.gz<\/code> file.\n<pre><code class=\"language-bash\">wget http:\/\/download.pingcap.org\/tispark-sample-data.tar.gz\n<\/code><\/pre>\n<\/li>\n<li>Unzip the sample file:\n<pre><code class=\"language-bash\">tar zxvf tispark-sample-data.tar.gz\n<\/code><\/pre>\n<\/li>\n<li>Inject the sample test data from sample data folder to MySQL:\n<pre><code class=\"language-bash\">cd tispark-sample-data\n.\/sample_data.sh\n<\/code><\/pre>\n<p>This will take a few seconds.<\/li>\n<li>Go back to your MySQL client window or tab, and see what&#8217;s in there:\n<pre><code class=\"language-sql\">SHOW DATABASES;\n<\/code><\/pre>\n<p><strong>Result:<\/strong> You can see the <code>TPCH_001<\/code> database on the list. That&#8217;s the sample data we just ported over.<\/p>\n<img loading=\"lazy\" decoding=\"async\" width=\"444\" height=\"402\" class=\"wp-image-741\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/imported_data.png\" alt=\"Imported data\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/imported_data.png 444w, https:\/\/static.pingcap.com\/files\/2018\/06\/imported_data-300x272.png 300w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/>\n<p>Now let&#8217;s go into <code>TPCH_001<\/code>:<\/p>\n<pre><code class=\"language-sql\">USE TPCH_001;\nSHOW TABLES;\n<\/code><\/pre>\n<p><strong>Result:<\/strong> You can see all the tables in <code>TPCH_001<\/code>, like <code>NATION<\/code>, <code>ORDERS<\/code>, etc.<\/li>\n<li>Let&#8217;s see what&#8217;s in the <code>NATION<\/code> table:\n<pre><code class=\"language-sql\">SELECT * FROM NATION;\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p><strong>Result:<\/strong> You&#8217;ll see a list of countries with some keys and comments.<\/p>\n<img loading=\"lazy\" decoding=\"async\" width=\"2500\" height=\"868\" class=\"wp-image-742\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/the_records_in_the_nation_table.png\" alt=\"The records in the NATION table\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table.png 2500w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table-300x104.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table-1024x356.png 1024w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table-768x267.png 768w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table-1536x533.png 1536w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table-2048x711.png 2048w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_records_in_the_nation_table-1440x500.png 1440w\" sizes=\"auto, (max-width: 2500px) 100vw, 2500px\" \/>\n<h2><span class=\"ez-toc-section\" id=\"Launch_TiSpark\"><\/span>Launch TiSpark<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now let&#8217;s launch TiSpark, the last missing piece of our hybrid database puzzle.<\/p>\n<ol>\n<li>In the same window where you downloaded TiSpark sample data (or open a new tab), go back to the <code>tidb-docker-compose<\/code> directory.<\/li>\n<li>Launch Spark within TiDB with the following command:\n<pre><code class=\"language-bash\">docker-compose exec tispark-master  \/opt\/spark\/bin\/spark-shell\n<\/code><\/pre>\n<p>This will take a few minutes.<\/p>\n<p><strong>Result:<\/strong> Now you can Spark!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1456\" height=\"426\" class=\"wp-image-743\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/now_you_can_spark.png\" alt=\"Now you can Spark\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/now_you_can_spark.png 1456w, https:\/\/static.pingcap.com\/files\/2018\/06\/now_you_can_spark-300x88.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/now_you_can_spark-1024x300.png 1024w, https:\/\/static.pingcap.com\/files\/2018\/06\/now_you_can_spark-768x225.png 768w, https:\/\/static.pingcap.com\/files\/2018\/06\/now_you_can_spark-1440x421.png 1440w\" sizes=\"auto, (max-width: 1456px) 100vw, 1456px\" \/><\/li>\n<li>Use the following command to set <code>TPCH_001<\/code> as default database:\n<pre><code class=\"language-bash\">spark.sql(\"use TPCH_001\")\n<\/code><\/pre>\n<p>It looks something like this:<br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"94\" class=\"wp-image-744\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/bind_tispark_to_this_spark_instance.jpg\" alt=\"Bind TiSpark to this Spark instance\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/bind_tispark_to_this_spark_instance.jpg 768w, https:\/\/static.pingcap.com\/files\/2018\/06\/bind_tispark_to_this_spark_instance-300x37.jpg 300w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/li>\n<li>Now, let&#8217;s see what&#8217;s in the <code>NATION<\/code> table (should be the same as what we saw on our MySQL client):\n<pre><code class=\"language-java\">spark.sql(\"select * from nation\").show(30);\n<\/code><\/pre>\n<p><strong>Result:<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"511\" height=\"469\" class=\"wp-image-745\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/whats_in_the_nation_table_in_spark.png\" alt=\"What's in the NATION table in Spark\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/whats_in_the_nation_table_in_spark.png 511w, https:\/\/static.pingcap.com\/files\/2018\/06\/whats_in_the_nation_table_in_spark-300x275.png 300w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Lets_get_hybrid\"><\/span>Let&#8217;s get hybrid!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Now, let&#8217;s go back to the MySQL tab or window, make some changes to our tables, and see if the changes show up on the TiSpark side.<\/p>\n<ol>\n<li>In the MySQL client, try this <code>UPDATE<\/code>:\n<pre><code class=\"language-sql\">UPDATE NATION SET N_NATIONKEY=444 WHERE N_NAME=\"CANADA\";\nSELECT * FROM NATION;\n<\/code><\/pre>\n<\/li>\n<li>Then see if the update worked:\n<pre><code class=\"language-sql\">SELECT * FROM NATION;\n<\/code><\/pre>\n<\/li>\n<li>Now go to the TiSpark Terminal window, and see if you can see the same update:\n<pre><code class=\"language-java\">spark.sql(\"select * from nation\").show(30);\n<\/code><\/pre>\n<p><strong>Result:<\/strong> The <code>UPDATE<\/code> you made on the MySQL side shows up immediately in TiSpark!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1167\" height=\"580\" class=\"wp-image-746\" src=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/the_same_result_is_showing_on_both_the_mysql_client_and_tispark_client.png\" alt=\"The same result is showing on both the MySQL client and TiSpark Client\" srcset=\"https:\/\/static.pingcap.com\/files\/2018\/06\/the_same_result_is_showing_on_both_the_mysql_client_and_tispark_client.png 1167w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_same_result_is_showing_on_both_the_mysql_client_and_tispark_client-300x149.png 300w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_same_result_is_showing_on_both_the_mysql_client_and_tispark_client-1024x509.png 1024w, https:\/\/static.pingcap.com\/files\/2018\/06\/the_same_result_is_showing_on_both_the_mysql_client_and_tispark_client-768x382.png 768w\" sizes=\"auto, (max-width: 1167px) 100vw, 1167px\" \/><\/li>\n<\/ol>\n<p>You can see that both the MySQL and TiSpark clients return the same results &#8212; fresh data for you to do analytics on right away. Voila!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>With this simple deployment of TiDB on your local machine, you now have a functioning Hybrid Transactional and Analytical processing (HTAP) database. You can continue to make changes to the data in your MySQL client (simulating transactional workloads) and analyze the data with those changes in TiSpark (simulating real-time analytics).<\/p>\n<p>Of course, launching TiDB on your local machine is purely for experimental purposes. If you are interested in trying out TiDB for your production environment, send us a note: <a href=\"mailto:info@pingcap.com\">info@pingcap.com<\/a> or reach out on <a href=\"https:\/\/www.pingcap.com\/ko\/\">our website<\/a>. We&#8217;d be happy to help you!<\/p>","protected":false},"excerpt":{"rendered":"<p>In this 5-minute tutorial for beginners, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer, so you can get a taste of its hybrid power, before using it for work or your own project in production.<\/p>","protected":false},"author":85,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[13],"tags":[10,29],"class_list":["post-734","post","type-post","status-publish","format-standard","hentry","category-product","tag-htap","tag-tutorial"],"acf":[],"featured_image_src":null,"author_info":{"display_name":"Queeny Jin","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/queeny-jin\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark | TiDB<\/title>\n<meta name=\"description\" content=\"In this tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer. Try now!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark | TiDB\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer. Try now!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-08T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-20T13:43:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png\" \/>\n<meta name=\"author\" content=\"Queeny Jin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"Queeny Jin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\"},\"author\":{\"name\":\"Queeny Jin\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/d67e511874ba08a77e9171ee79b9be69\"},\"headline\":\"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark\",\"datePublished\":\"2018-06-08T00:00:00+00:00\",\"dateModified\":\"2024-08-20T13:43:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\"},\"wordCount\":1081,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png\",\"keywords\":[\"HTAP\",\"Tutorial\"],\"articleSection\":[\"Product\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\",\"name\":\"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark | TiDB\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png\",\"datePublished\":\"2018-06-08T00:00:00+00:00\",\"dateModified\":\"2024-08-20T13:43:21+00:00\",\"description\":\"In this tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer. Try now!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage\",\"url\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png\",\"contentUrl\":\"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/d67e511874ba08a77e9171ee79b9be69\",\"name\":\"Queeny Jin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"caption\":\"Queeny Jin\"},\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/queeny-jin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark | TiDB","description":"In this tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer. Try now!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/","og_locale":"ko_KR","og_type":"article","og_title":"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark | TiDB","og_description":"In this tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer. Try now!","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2018-06-08T00:00:00+00:00","article_modified_time":"2024-08-20T13:43:21+00:00","og_image":[{"url":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png","type":"","width":"","height":""}],"author":"Queeny Jin","twitter_card":"summary_large_image","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"\uae00\uc4f4\uc774":"Queeny Jin","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"6\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/"},"author":{"name":"Queeny Jin","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/d67e511874ba08a77e9171ee79b9be69"},"headline":"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark","datePublished":"2018-06-08T00:00:00+00:00","dateModified":"2024-08-20T13:43:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/"},"wordCount":1081,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage"},"thumbnailUrl":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png","keywords":["HTAP","Tutorial"],"articleSection":["Product"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/","url":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/","name":"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark | TiDB","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage"},"thumbnailUrl":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png","datePublished":"2018-06-08T00:00:00+00:00","dateModified":"2024-08-20T13:43:21+00:00","description":"In this tutorial, we will show you how to spin up a standard TiDB cluster using Docker Compose on your local computer. Try now!","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#primaryimage","url":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png","contentUrl":"https:\/\/en.pingcap.com\/wp-content\/uploads\/2018\/06\/1000px-Apple_logo_black.svg.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/d67e511874ba08a77e9171ee79b9be69","name":"Queeny Jin","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Queeny Jin"},"url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/queeny-jin\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/how-to-spin-up-an-htap-database-in-5-minutes-with-tidb-tispark\/\"><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Product<\/div><\/div><h5 class=\"card-resource__title\">How To Spin Up an HTAP Database in 5 Minutes with TiDB + TiSpark<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/734","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=734"}],"version-history":[{"count":5,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/734\/revisions"}],"predecessor-version":[{"id":18953,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/734\/revisions\/18953"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}